RxJavaはOkHttpと結合してネットワークにアクセスする
RxJavaはOkHttpと結合してネットワークにアクセスする
ここではGithub apiへのアクセスを例に挙げます.
Observableの作成
まずcreateメソッドを使用してObservableを作成し、コールバックメソッドでOkHttp非同期要求ネットワークを使用し、emitterのonNextメソッドに戻り結果を送信します.同時にemitterのonErrorとonCompleteを実現する.
サブスクリプションオブザーバObserver
オブザーバーのサブスクリプションコードは次のとおりです.
観察者はonNextメッセージを受け取ってToastを送信する.AndroidメインスレッドでobserveOnメソッドを使用して実行しているので、UI操作ができます.
出力結果は次のとおりです.
ネットワーク権限の追加
ネットワークリクエストにはAndroidManifestにネットワーク権限を追加する必要があります
Pバージョン以上のHttps以外のリクエストの場合は、アプリケーションノードで許可文書を構成する必要があります.
res/xmlディレクトリのnetwork_security_config.xml
ここではGithub apiへのアクセスを例に挙げます.
Observableの作成
まずcreateメソッドを使用してObservableを作成し、コールバックメソッドでOkHttp非同期要求ネットワークを使用し、emitterのonNextメソッドに戻り結果を送信します.同時にemitterのonErrorとonCompleteを実現する.
private Observable<String> getObservable() {
return Observable.create(emitter -> {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.github.com/users/flutter")
.get()
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
emitter.onError(e);
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
String str = response.body().string();
Log.d(TAG, "onResponse:" + response + ", body:" + str);
emitter.onNext(str);
emitter.onComplete();
}
});
});
}
サブスクリプションオブザーバObserver
オブザーバーのサブスクリプションコードは次のとおりです.
private void getAsyncHttp() {
Observable<String> observable = getObservable();
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(str -> Toast.makeText(getApplicationContext(), "load success:" + str, Toast.LENGTH_LONG).show(),
throwable -> Log.e(TAG, "onError:" + throwable.getMessage()), () -> Log.d(TAG, "onCompleted"));
}
観察者はonNextメッセージを受け取ってToastを送信する.AndroidメインスレッドでobserveOnメソッドを使用して実行しているので、UI操作ができます.
出力結果は次のとおりです.
RxJavaActivity: onResponse:Response{protocol=http/1.1, code=200, message=OK, url=https://api.github.com/users/flutter}, body:{"login":"flutter","id":14101776, ...
ネットワーク権限の追加
ネットワークリクエストにはAndroidManifestにネットワーク権限を追加する必要があります
Pバージョン以上のHttps以外のリクエストの場合は、アプリケーションノードで許可文書を構成する必要があります.
android:networkSecurityConfig="@xml/network_security_config"
res/xmlディレクトリのnetwork_security_config.xml