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()
の方法でスレッドをメインスレッドに変換する必要があります.