美文网首页
retrofit 2 + rxjava 2 + okhttp3

retrofit 2 + rxjava 2 + okhttp3

作者: wekingtan | 来源:发表于2018-05-02 15:11 被阅读0次

1. okhttp3

public class HttpUtil {

    public static void sendOkHttpRequest(String address, okhttp3.Callback callback) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(address)
                .build();
        client.newCall(request).enqueue(callback);
    }
}

sendOkHttpRequest() 方法中有一个 okhttp3.Callback 参数, 这个是 Okhttp 库中自带的一个回调接口。在 client.newCall() 之后调用 enqueue() 方法,并且把 okhttp3.Callback 参数传入。 Okhttp 在enqueue() 方法内部已经帮我们开好子线程,然后会在子线程中执行 HTTP 请求,并将最终的请求结果回调到 okhttp3.Callback 当中。

我们在调用 sendOkHttpRequest() 方法的时候可以这样写:

HttpUtil.sendOkHttpRequest(address, new Callback() {
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String responseText = response.body().string();
                ...........
                getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                        ...........
                        }
                    });
            }

            @Override
            public void onFailure(Call call, IOException e) {
                //通过 runOnUiThread() 方法回到主线程处理逻辑
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        ...........
                    }
                });
            }
        });

另外,不管是使用 HttpURLConnection 还是 OkHttp, 最终的回调接口都还是在子线程中运行的,所以我们不能在子线程执行任何的 UI操作,需要借助 runOnUiThread() 方法把线程转换为主线程。

相关文章

网友评论

      本文标题:retrofit 2 + rxjava 2 + okhttp3

      本文链接:https://www.haomeiwen.com/subject/rmtolftx.html