retrofit 2+rxjava 2+okhttp 3のいくつかのこと

1794 ワード

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()メソッドには、Okhttpライブラリに付属するコールバックインタフェースであるokhttp3.Callbackパラメータがあります.client.newCall()の後にenqueue()メソッドが呼び出され、okhttp3.Callbackパラメータが入力される.Okhttpはenqueue()メソッドの内部でサブスレッドを開くのを手伝ってくれ、サブスレッドでHTTP要求を実行し、最終的な要求結果をokhttp 3にコールバックする.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()の方法でスレッドをメインスレッドに変換する必要があります.