Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AsyncTask永远不会在onPostExecute方法中结束_Android_Android Asynctask - Fatal编程技术网

Android AsyncTask永远不会在onPostExecute方法中结束

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

我创建了一个AsyncTask,它在doInBackground方法中读取JSONArray并返回自定义项的ArrayList(ArrayList)。在此之前,在onPostExecute方法中,我将AsyncTask中的ArrayList移动到主线程的另一个ArrayList,但我认为我的AsyncTask永远不会结束并且仍然工作。我把代码放在这里:

以下是异步任务:

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());
    }
}