Android 来自改装和x2B的负荷数据期间的进度对话框冻结;RxJava
我正在使用一个Android 来自改装和x2B的负荷数据期间的进度对话框冻结;RxJava,android,retrofit,rx-java,Android,Retrofit,Rx Java,我正在使用一个ProgressDialog在发出Rest请求之前显示,请求的响应很大,这将冻结ProgressDialog的动画。我怎样才能解决这个问题?我只发现一些例子说使用runOnUiThread或doInBackground和AsyncTask但是,我使用的是RxJava。我尝试了runOnUiThread,但没有成功 //My request public void getMyData(final MyListener listener) { AppApi AppApi = getIn
ProgressDialog
在发出Rest请求之前显示,请求的响应很大,这将冻结ProgressDialog
的动画。我怎样才能解决这个问题?我只发现一些例子说使用runOnUiThread
或doInBackground
和AsyncTask
但是,我使用的是RxJava
。我尝试了runOnUiThread
,但没有成功
//My request
public void getMyData(final MyListener listener) {
AppApi AppApi = getInstanceMyApi();
AppApi.getMyData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseData>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
//error
}
@Override
public void onNext(ResponseData response) {
//success, send data to presenter to update view
}
});
//Presenter call ws
public void attemptGetDataFromWS() {
showProgress();
getMyData(this);
}
@Override
public void onGetMyDataSuccess(ResponseData response) {
hideProgress();
}
@Override
public void onGetMyDataError(String error) {
hideProgress();
}
//我的请求
public void getMyData(最终MyListener侦听器){
AppApi AppApi=getInstanceMyApi();
AppApi.getMyData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
未完成的公共无效(){
}
@凌驾
公共无效申报人(可丢弃的e){
//错误
}
@凌驾
public void onNext(响应数据响应){
//成功,将数据发送给演示者以更新视图
}
});
//演示者呼叫ws
public void attemptGetDataFromWS(){
showProgress();
getMyData(此);
}
@凌驾
公共无效OnGetMyDataSucces(响应数据响应){
hideProgress();
}
@凌驾
公共无效onGetMyDataError(字符串错误){
hideProgress();
}
遵循此方法。这是使用REST API+改型调用示例
private void callRestAPI() {
Retrofit retrofit = new Retrofit.Builder().baseUrl(BASEURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
newsAPI = retrofit.create(NewsAPI.class);
Call<JSONResponse> call = newsAPI.topNews("soure", "api-key");
// Set up progress before call
final ProgressDialog progressDoalog;
progressDoalog = new ProgressDialog(MainActivity.this);
progressDoalog.setMax(100);
progressDoalog.setMessage("Its loading....");
progressDoalog.setTitle("ProgressDialog bar example");
progressDoalog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// show it
progressDoalog.show();
call.enqueue(new Callback<JSONResponse>() {
@Override
public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
// close it after response
progressDoalog.dismiss();
}
}
@Override public void onFailure (Call < JSONResponse > call, Throwable t){
// close it after response
progressDoalog.dismiss();
}
});
}
private void callRestAPI(){
改装改装=新建改装.Builder().baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
newsAPI=reformation.create(newsAPI.class);
Call Call=newsAPI.topNews(“soure”,“api key”);
//在呼叫前设置进度
最终进度对话框进度日志;
progressDoalog=新建ProgressDialog(MainActivity.this);
progressDoalog.setMax(100);
progressDoLog.setMessage(“其加载…”);
setTitle(“ProgressDialog栏示例”);
progressDoalog.setProgressStyle(ProgressDialog.STYLE_水平);
//表现出来
progressDoalog.show();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
//响应后关闭它
progressDoalog.disclose();
}
}
@重写公共void onFailure(调用Call,可丢弃的t){
//响应后关闭它
progressDoalog.disclose();
}
});
}
公共void getMyData(最终MyListener侦听器){
AppApi AppApi=getInstanceMyApi();
AppApi.getMyData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.认购(新的可处置观察员){
@凌驾
未完成的公共无效(){
处置();
}
@凌驾
公共无效申报人(可丢弃的e){
onGetMyDataError(例如getMessage());
}
@凌驾
public void onNext(响应数据响应){
onGetMyDataSucces(响应);
}
});
//演示者呼叫ws
public void attemptGetDataFromWS(){
showProgress();
getMyData(此);
}
@凌驾
公共无效OnGetMyDataSucces(响应数据响应){
hideProgress();
}
@凌驾
公共无效onGetMyDataError(字符串错误){
hideProgress();
}
你应该提供一些代码。你应该用一些代码显示你的代码i更新。可能是解析过程冻结了你的应用程序。你应该显示更多代码(解析或在UI线程中执行任何操作)是的,显示在调用onNext时你正在执行的操作
public void getMyData(final MyListener listener) {
AppApi AppApi = getInstanceMyApi();
AppApi.getMyData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<ResponseData>() {
@Override
public void onCompleted() {
dispose();
}
@Override
public void onError(Throwable e) {
listener.onGetMyDataError(e.getMessage());
}
@Override
public void onNext(ResponseData response) {
listener.onGetMyDataSuccess(response);
}
});
//Presenter call ws
public void attemptGetDataFromWS() {
showProgress();
getMyData(this);
}
@Override
public void onGetMyDataSuccess(ResponseData response) {
hideProgress();
}
@Override
public void onGetMyDataError(String error) {
hideProgress();
}