请问 关于okhttp callback 的问题

gdutqiang 发布于 2016/09/08 17:27
阅读 673
收藏 0
请问  , 关于以下代码的理解问题:
通过  
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());
    }
});




加载中
0
HandSome-T
HandSome-T
https://github.com/RunningTheSnail/EQ
0
HandSome-T
HandSome-T
直接使用retroift吧
HandSome-T
HandSome-T
简单粗暴
返回顶部
顶部