请问 关于okhttp callback 的问题

gdutqiang 2016-09-08 05:22:48
请问 , 关于以下代码的理解问题:
通过
TryRequest 这个类,当运行 以下这句代码后,
obj = OkHttpUtils.enqueue((new com.squareup.okhttp.Request.Builder()).url(Config.getUri()).post(((RequestBody) (obj))).build(), this); 就会调用 OkHttpUtils 这个类里边的 public static Call enqueue(Request request, Callback callback)的, 当正常返回的时候,就会调用 TryRequest 类里边的:
public void onResponse( final Response response) throws IOException {
Log.i(TAG, "TryRequest onResponse() reuslt" );
}

我的问题是: 为什么最后可以回调 TryRequest 类里边的onResponse()这个函数呢?
调用这个函数obj = OkHttpUtils.enqueue((new com.squareup.okhttp.Request.Builder()).url(Config.getUri()).post(((RequestBody) (obj))).build(), this);的时候 , 它传入的是 this 而已。 而不是 通常情况 下

call.enqueue(new Callback() { } 这样,这种是直接传个 callback进去的。



也就是 为什么 this 可以起到 传入callback 的作用呢?

麻烦知道的朋友 帮忙回复,谢谢啦


有两个文件:

//-----以下是文件1 TryRequest 代码

import com.squareup.okhttp.Callback;
public class TryRequest
implements Callback
{
。。。。
public void onFailure(Call call, IOException e) {
Log.e(TAG, " TryRequest :onFailure() " );
}

public void onResponse( final Response response) throws IOException {
Log.i(TAG, "TryRequest onResponse() reuslt" );
}


public Call request(boolean flag)
{
......
try
{
obj = getJSON(); // obj 为json ,且已经转化为 string
obj = RequestBody.create(JSON, ((String) (obj)));
obj = OkHttpUtils.enqueue((new com.squareup.okhttp.Request.Builder()).url(Config.getUri()).post(((RequestBody) (obj))).build(), this);
}
catch (Exception exception)
{
exception.printStackTrace();
return null;
}
return ((Call) (obj));
}

}


// 以下是文件2代码 OkHttpUtils .java

public class OkHttpUtils {
private static final String TAG = "OkHttpUtils";
private static final String CHARSET_NAME = "UTF-8";
private static final OkHttpClient mOkHttpClient = new OkHttpClient();

public static Call enqueue(Request request, Callback callback)
{
Call localCall = mOkHttpClient.newCall(request);
localCall.enqueue(callback);
return localCall;
}

}

一般情况下,用okhttp访问服务器可以用以下代码:

final String url = "http://www.abc.com.cn/data/sk/101010100.html";
//
OkHttpClient okHttpClient = new OkHttpClient();
final okhttp3.Request request = new okhttp3.Request.Builder()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, "onFailure() e=" + e);
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
Log.i(TAG, " onResponse() reuslt=" + response.body().string());
}
});
...全文
494 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_O_ 2016-09-08
  • 打赏
  • 举报
回复
因为你这个类implements了callback,所以传this,就会回掉
一不小心_ 2016-09-08
  • 打赏
  • 举报
回复
实现了接口,并且error或者success的时候调用接口的不同方法。而你实现了这个方法,当然就会顺着代码执行到里面啊
gdutqiang 2016-09-08
  • 打赏
  • 举报
回复
引用 1 楼 qiaoranak 的回复:
回调不懂么?!!太菜了
@qiaoranak 我知道是回调呀,只是 我不清楚的是: this 代表的是 TryRequest 这个类的引用的,而为什么可以用这个可以代表 传入 callback的 作用。 也就是 过程我是知道的,就是想知道 为什么这样 也可以起作用而已嘛
qiaoranak 2016-09-08
  • 打赏
  • 举报
回复
回调不懂么?!!太菜了

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧