RxJavaはOkHttpと結合してネットワークにアクセスする


RxJavaはOkHttpと結合してネットワークにアクセスする
ここでは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