【发布时间】:2016-11-13 15:31:45
【问题描述】:
我正在为 httpRequest 使用 RxAndroid 和 Retrofit,我的代码如下:
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging)
.authenticator(new DigestAuthenticator())
.build();
// retrofit with custom client
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(NetUtil.getServerBaseUrl())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
ApiService apiService = retrofit.create(ApiEndpoints.class);
CustomerSubscriber mSubscriber = new CustomerSubscriber();
apiService.checkAccount(mUser.getEmail()).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(mSubscirber);
//Retrofit
@Headers({
"Accept: application/json;charset=utf-8",
"Content-Type: application/json;charset=utf-8"
})
@HEAD("/account")
Observable<Result<Void>> rxHeadAccount(
@Query("email") String encryptedEmail);
我的场景是这样的:每次点击按钮时都会触发“apiService.checkAccount()”方法。第一次:点击按钮,发送httpRequest,我可以得到响应
但是,第二次点击,没有发送httpRequest,日志显示“I/Choreographer: Skipped 115 frames!应用程序可能在其主线程上做的工作太多。” p>
但是,如果我将代码更改为
apiService.checkAccount(mUser.getEmail()).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(new Subscriber<Result<Void>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Result<Void> voidResult) {
}
});
}
});
Retrofit 效果很好,可以任意多次发送 HttpRequest?
看起来“订阅者”不能是一个实例?
为什么,你知道吗?
谢谢
【问题讨论】:
标签: retrofit rx-java rx-android