我在AsyncTask
运行多个方法时遇到问题。这是我的doInBackground
代码:
AsyncTask
相反,运行并等待第一个方法, public class FETCHDATA extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
pdialog = new ProgressDialog(getContext());
pdialog.setTitle("Please Wait");
pdialog.setMessage("Fetching data...");
pdialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
try{
method1();
method2();
method3();
method4();
method5();
method6();
method7();
}catch (Throwable e){
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void aVoid) {
if (pdialog.isShowing()){
pdialog.dismiss();
}
}
进入下一个方法。和doInBackground
解雇一秒钟。
注意
每个方法都会从我们的ProgressDialog
获取数据并将其保存在我的API
。
问题 在第一种方法完成获取和保存数据之前,如何在转移到第二种方法之前执行我的方法。
答案 0 :(得分:0)
您可以在items: [{
xtype: 'combobox',
id: 'addObjectComboCopy',
fieldLabel: '<h style= "color:red;">*</h> accountNumbers',
store: addFormStore,
displayField: 'select',
valueField: 'name',
editable: false,
allowBlank: false
中放置一个带有开关案例陈述的计数器,您可以选择要执行的方法,然后在递归var addFormStore = Ext.create('Ext.data.Store', {
fields: ['name', 'select'],
data: [
{"name": "01", "select": "12345A"},
{"name": "02", "select": "12345B"},
{"name": "03", "select": "12345C"}
]
调用doInBackground
中
编辑:工作代码(onPostExecute
之后我忘了new FETCHDATA().execute()
)
break;
答案 1 :(得分:0)
也许你必须创建多个AsyncTask,每当第一个方法完成时,通过返回boolean而不是void instance来传达它 - >&gt;扩展了AsyncTask。
答案 2 :(得分:0)
这很奇怪。
我假设您的methodX()
是异步调用?
在这种情况下,您可以使用Thread.join()
或CountDownLatch
。
答案 3 :(得分:0)
您违反了异步任务的使用。异步任务是为了进行简短的异步操作而设计的,并且可以在之前,期间和之后轻松更新UI。立即进行Sqlite操作。
您可以在此处阅读更多内容:https://developer.android.com/reference/android/os/AsyncTask
因此,您需要为自己实施某种工作,以便立即执行这些操作,或者使用一些流行的库,如Retrofit。
如果你坚持使用异步任务,因为需要从UI线程执行异步任务,你需要创建新的异步任务,每次完成后从onPostExecute执行它,你当然需要传递一个参数(一个计数器或什么)toInBackground知道应该调用哪个方法。
答案 4 :(得分:0)
我认为问题在于你的所有方法或某些方法已经在一个单独的线程上运行。因此,每当您调用已在单独的线程doInBackground()
上运行的方法时,当前线程将不会等待它并继续执行。
除此之外你放try-catch
的方式不是一种正确的方法。此外,如果你想一个接一个地调用多个线程,你应该使用ThreadPoolExecuter
。
如果您没有使用网络库要进行API调用,您可以使用RetroFit。