Android AsyncTask永远不会在onPostExecute方法中结束
我创建了一个AsyncTask,它在doInBackground方法中读取JSONArray并返回自定义项的ArrayList(ArrayList)。在此之前,在onPostExecute方法中,我将AsyncTask中的ArrayList移动到主线程的另一个ArrayList,但我认为我的AsyncTask永远不会结束并且仍然工作。我把代码放在这里: 以下是异步任务:Android AsyncTask永远不会在onPostExecute方法中结束,android,android-asynctask,Android,Android Asynctask,我创建了一个AsyncTask,它在doInBackground方法中读取JSONArray并返回自定义项的ArrayList(ArrayList)。在此之前,在onPostExecute方法中,我将AsyncTask中的ArrayList移动到主线程的另一个ArrayList,但我认为我的AsyncTask永远不会结束并且仍然工作。我把代码放在这里: 以下是异步任务: private class ReadJSONTask extends AsyncTask<Void, Void, Arr
private class ReadJSONTask extends AsyncTask<Void, Void, ArrayList<Item>>{
@Override
protected ArrayList<Item> doInBackground(Void... params) {
// TODO Auto-generated method stub
ArrayList<Item> auxList = new ArrayList<Item>();
LoadData(auxList); //Method that reads JSON and load information in the ArrayList
return auxList; // Return ArrayList
}
@Override
protected void onPostExecute(ArrayList<Item> result) {
// TODO Auto-generated method stub
Log.i("OnPostExecute", String.valueOf(result.size())); //The size of the array
listMain = result; // Move the data of the AsyncTask to the main Thread
Log.i("OnPostExecute", String.valueOf(listaComic.size())); //The size of the ArrayList I use in the Main Thread
}
}
在日志中,我看到onPostExecute()方法中的所有日志都已打印,但主线程中没有打印任何日志
我不知道修复错误的位置,我已经在StackOverflow的论坛上搜索了2天,但我无法修复:S,正如名称所示,AsyncTask是异步的,但出于某种原因,您希望
执行()
被阻止,除非异步任务结束,这是错误的。您的代码工作正常,我希望listMain是空的,并且一旦execute()
触发asynctask,for
将不会显示任何内容,因为异步任务尚未完成。你们应该修改你们的应用程序逻辑,这样异步任务就可以告诉“主线程”它已经完成了。也就是说,将for
循环移动到separate方法,并从onPostExecute()
调用它,因为名称表明异步任务是异步的,但由于某种原因,您希望执行()
被阻止,除非异步任务结束,否则这是错误的。您的代码工作正常,我希望listMain是空的,并且一旦execute()
触发asynctask,for
将不会显示任何内容,因为异步任务尚未完成。你们应该修改你们的应用程序逻辑,这样异步任务就可以告诉“主线程”它已经完成了。例如,将您的for
循环移动到separate方法,并从onPostExecute()
调用它。我已经改进了异步任务的另一个算法,现在它可以工作了,感谢您教我这一课,这是我的第一个异步任务,我没有正确的方法。谢谢:)我为Asynctask改进了另一个算法,现在它可以工作了,谢谢你教我这一课,这是我的第一个Asynctask,我没有正确的方法。谢谢:)
if (isOnline()){ //Return true if there is internet connection
ReadJSONTask task = new ReadJSONTask();
task.execute();
Log.i("Main Thread - listMain Size", String.valueOf(listMain.size())); //Never executed
//This for loop its only for debug purposes, never executed
for (Item item : listMain){
Log.i("Items", item.toString());
}
}