【发布时间】:2021-03-31 06:49:34
【问题描述】:
这里的后台方法需要根据列表的大小调用多个API请求。但我正在使用 while()。它不是等到请求 API 并得到响应。所以我在里面使用线程。如何同步。一旦API调用成功后,只需要调用下一个请求即可。
private class AsyncPost extends AsyncTask<String, Void, Void> {
String strResult = "";
@Override
protected Void doInBackground(String... params) {
try {
GlobalVariables.rqCount=0;
mHandler=null;
mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(android.os.Message message) {
onProgressUpdate(message.getData().getString("MessageString"));
}
};
strResult = "ENSURE NOT EMPTY";
strResult=getRequestResult(Listactivity.this,50, mHandler);
}
catch (Exception e)
{
dialog.dismiss();
}
return null;
}
@Override
protected void onPostExecute(Void resultGetlogin) {
try {
dialog.dismiss();
if(strResult.equals("Success")){
CustomDiallog.showAlertDialog(Listactivity.this, "Successfully!!");
}else{
CustomDiallog.showAlertDialog(Listactivity.this, "FAIL!!");
}
} catch (Exception e) {
dialog.dismiss();
}
}
protected void onProgressUpdate(String... values) {
dialog.setMessage(""+values[0]);
}
protected void onPreExecute() {
dialog = ProgressDialog.show(Sync_Bulk.this, "", "");
}
}
此线程正在使用但崩溃帮助我
private class getRequestResult(Context context, int allSyncLimit,Handler handler2){
new Thread(new Runnable() {
@Override
public void run() {
try {
inalContext.wait();
if (res_result.equals("Success")) {
result[0] = "Success";
} else {
result[0] = "fail";
}
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (finalContext) {
postRequest((Activity) finalContext, list); // This is Api method and notify() is called
}
}
}).start();
}
}
【问题讨论】:
-
您没有发布“postRequest()”代码,所以运行“notify()”时不容易理解。也没有任何“WHILE”,那么你在哪里进行迭代?但是,您的解决方案似乎是错误的,因为“对话框”似乎是一个 UI 元素,不得直接从“doInBackground()”访问。请添加“postRequest()”代码
标签: java android multithreading android-asynctask android-thread