0
これはインターフェイスです:なぜRxJavaでNull値がonNextになっていますか? (rxjava2 + retrofit2)
@GET("solicitation/get/{protocol}")
Observable<Solicitation> getProtocol(@Path("protocol") String protocol, @Query("X-Authorization") String apiKey);
そして、これは私のApiClient
クラスであり、
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient.build())
.build();
は、これは私が私のMainActivity
onCreate
上でそれを呼び出す方法です:
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
apiService.getProtocol("2313868283", getResources().getString(R.string.api_key))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(obSol);
これはonCreate
の外です:
Observer<Solicitation> obSol = new Observer<Solicitation>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e(TAG, "onSubscribe" + Thread.currentThread().getName());
}
@Override
public void onNext(@NonNull Solicitation solicitation) {
Log.e(TAG, "onNext: " + solicitation.getName() + " " + Thread.currentThread().getName());
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG, "onError: " + e.toString());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: All Done!" + Thread.currentThread().getName());
}
};
私はアプリの改造を実行し、その魔法を行い、そのAPI呼び出し、すべての外に結果をヤンク、私はnullを取得する以外、私は、実際の結果得ている必要があります。ここで
06-11 12:26:31.691 22760-22760/com.example.ga.myapplication E/lol: onSubscribemain
06-11 12:26:31.704 22760-22798/com.example.ga.myapplication D/OkHttp: --> GET (URL HIDDEN FOR THIS POST) http/1.1
06-11 12:26:31.704 22760-22798/com.example.ga.myapplication D/OkHttp: --> END GET
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication D/OpenGLRenderer: Swap behavior 1
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication D/OpenGLRenderer: Swap behavior 0
06-11 12:26:32.054 22760-22760/com.example.ga.myapplication W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
06-11 12:26:32.511 22760-22798/com.example.ga.myapplication D/OkHttp: <-- 200 OK (URL HIDDEN FOR THIS POST) (807ms)
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Date: Sun, 11 Jun 2017 15:40:51 GMT
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Server: Apache/2.4.18 (Ubuntu)
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Origin: *
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Methods: GET, POST, OPTIONS
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Credentials: true
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Cache-Control: no-cache
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Set-Cookie: XSRF-TOKEN=ADA1ODc0MWRlNWZlOWM0MjJhYWNkMTc1OGZjMzk2ZDhlOGJhNTZlZDRhM2RmN2ZjMzk0NjFmOTdmIn0%3D; expires=Sun, 11-Jun-2017 17:40:51 GMT; Max-Age=7200; path=/
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Set-Cookie: laravel_session=eiUADHiuhsaduihAIUSDVuRWpacDR4Mm5wSzljNnc0YzJ5dFBBQ2NDU5ZTFmYjg3ZmM3ZiJ9; expires=Sun, 11-Jun-2017 17:40:51 GMT; Max-Age=7200; path=/; HttpOnly
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Content-Length: 329
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Keep-Alive: timeout=5, max=100
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Connection: Keep-Alive
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Content-Type: application/json
06-11 12:26:32.514 22760-22798/com.example.ga.myapplication D/OkHttp: {"data":[{"id":5,"name":"Roll D","protocol":"2313868283"}]}
06-11 12:26:32.514 22760-22798/com.example.ga.myapplication D/OkHttp: <-- END HTTP (329-byte body)
06-11 12:26:32.520 22760-22760/com.example.ga.myapplication E/lol: onNext: null main
06-11 12:26:32.520 22760-22760/com.example.ga.myapplication E/lol: onComplete: All Done!main
編集を:
が、これは、コールonNextあり、それは少し明確にするには、次の
Log.e(TAG, "onNext: " + solicitation.getName() + " " + Thread.currentThread().getName());
そして、これはログです:
06-11 12:26:32.520 22760-22760/com.example.ga.myapplication E/lol: onNext: null main
あなたは正しいです。私の質問を拡張するために、複数の結果がある場合、どのようにそれらをロギングすることができますか?私は.mapがやると思うが、私はオブザーバーを捨てなければならないだろうか?このような状況で地図作成の仕方を知りません。 – Rosenberg
'flatMapIterable'を使って、' .flatMapIterable(res - > res.data) 'のようなものをラッパーオブジェクトから抽出することができます。そして、それぞれの勧誘は別々にオブザーバーに届けられます。 – Kiskae