私はrxjava、retrofit2、okhttp3を使用しています。onError、RxJavaの値を使用したい
Log.dを入力するだけで、どのように動作し、ログは以下のように表示されます。
1. D/-- NetPresenter: checkConnectivity
2. D/-- NetPresenter: Observable
3. D/-- NetPresenter: onNext
4. D/-- MessageSetter: setMessage
5. D/-- MainActivity setText: setText
6. D/-- NetPresenter: onCompleted
7. D/-- NetChecker: onError
8. D/-- error msg: failed to connect to /192.168.0.27 (port 8081) after 5000ms
onErrorから値 "code"を取得した後でTextViewを設定する必要があります。
つまり、#7は#5より前に処理する必要があります。
リクエスト接続時にタイムアウトオプションがあると思いますが、どこで修正するのかわかりません。
誰でも私がそれを理解するのを助けることができますか?
ありがとうございました。
クラス1
public void checkConnectivity(Context context) {
Log.d("-- NetPresenter", "checkConnectivity");
this.context = context;
myObservable.subscribe(mySubscriber);
}
private Observable<Integer> myObservable = Observable.create(
new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> sub) {
Log.d("-- NetPresenter", "Observable");
int connType = cc.getConnectionStatus(context);
sub.onNext(connType);
sub.onCompleted();
}
}
);
private Subscriber<Integer> mySubscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer connType) {
Log.d("-- NetPresenter", "onNext");
int code = nc.netChecker(connType);
view.updateReceivedMessageTextView(ms.setMessage(code));
}
@Override
public void onCompleted() {
Log.d("-- NetPresenter", "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.d("-- NetPresenter", "onError");
}
};
クラス2.
public int netChecker(int connType) {
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(5, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.build();
retrofit = new Retrofit.Builder()
.baseUrl(ApiService.API_URL)
.client(okHttpClient)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
apiService = retrofit.create(ApiService.class);
Observable<Response<ResponseBody>> result = apiService.getData("database");
result.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Response<ResponseBody>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if(connType/10 == 0) code = 0;
else code = connType+1;
Log.d("-- NetChecker", "onError");
Log.d("-- error msg", e.getMessage());
}
@Override
public void onNext(Response<ResponseBody> response) {
Log.d("-- NetChecker", "onNext");
Log.d("message", response.message());
Log.d("code", "code :"+ response.code());
code = connType;
}
});
return code;
}
ヒントありがとうございました。私はそれを把握することができると思う! –