当数据准备就绪时,从改造的警报Mainthread
我有一个改造请求,当我在onResponse中获取数据时, 我在上面的代码中称为繁重工作的文本视图中插入了倍数,我从OnReponse得到结果,否则我会从数据库中得到结果,所以问题是我在OnResponse和OnFailure中有相同的代码,所以有任何方法可以将我繁重的工作放在改进之外,并等待响应只从OnResponse或OnFailure获得一个结果?当数据准备就绪时,从改造的警报Mainthread
call.enqueue(new Callback<Dashboard>() { @Override
public void onResponse(Call<Dashboard> call, Response<Dashboard> response) {
realm.beginTransaction();
dashboard = realm.copyToRealmOrUpdate(response.body());
realm.commitTransaction();
// heavy work : insert in data in multiple text views
}
@Override
public void onFailure(Call<Dashboard> call, Throwable t) {
Log.e("error ", "" + t.getMessage());
dashboard = realm.where(Dashboard.class).findFirst();
// heavy work : insert in data in multiple text views
}
}
回答:
试试这个.. 首先创建一个接口..Let称之为OKCallback。
public interface OKCallback { void onSuccess(String result);
void onFailure(String result);
}在方法启动改造要求
然后,通过最终OKCallback okCallback这样的..
public void NetworkCall(final OKCallback okCallback){ ...........
call.enqueue(new Callback<Dashboard>() {
@Override
public void onResponse(Call<Dashboard> call, Response<Dashboard> response) {
realm.beginTransaction();
dashboard = realm.copyToRealmOrUpdate(response.body());
realm.commitTransaction();
// heavy work : insert in data in multiple text views
okCallback.onSuccess(parcel);
}
最后只需在任何类或活动(ActivityX实现OKCallback)和您应该可以在那里完成繁重的工作。您还可以使用Handler将数据包装在onSuccess方法中,如图所示。
@Override public void onSuccess(String result) {
Handler handler = new Handler(ActivityX.this.getMainLooper());
//process result and
handler.post(new Runnable() {
@Override
public void run() {
//heavy work done here will run on UI thread
}
});
}
回答:
你可以改变它这样
//create a interface public interface ConfirmationCallback {
void onSuccess(YourResponseClass value);
void onError();
}
//call this method from your class
yourApiCall(new ConfirmationCallback() {
@Override
public void onSuccess(YourResponseClass value) {
realm.beginTransaction();
dashboard = realm.copyToRealmOrUpdate(value);
realm.commitTransaction();
// heavy work : insert in data in multiple text views
}
@Override
public void onError() {
dashboard = realm.where(Dashboard.class).findFirst();
// heavy work : insert in data in multiple text views
}
});
public void yourApiCall(final ConfirmationCallback confirmationCallback){
call.enqueue(new Callback<Dashboard>() {
@Override
public void onResponse(Call<Dashboard> call, Response<Dashboard> response) {
confirmationCallback.onSuccess(response.body());
}
@Override
public void onFailure(Call<Dashboard> call, Throwable t) {
Log.e("error ", "" + t.getMessage());
confirmationCallback.onError();
}
}
}
回答:
你可以让一个接口,让回拨主线程或得到在的onSuccess API调用的响应后()或者onFailure处()开始新的AsynTask和处理在后台请求。
以上是 当数据准备就绪时,从改造的警报Mainthread 的全部内容, 来源链接: utcz.com/qa/262156.html