2

我创建了一个 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
        }

    }

这里调用主线程中的 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());
    }
}

在日志中,我看到 onPostExecute() 方法中的所有日志都已打印,但主线程中没有任何内容。

我不知道要修复它的错误在哪里,我已经研究了 2 天并在论坛中搜索,在 StackOverflow 中,我无法修复它:S

4

1 回答 1

4

顾名思义,它AsyncTaskasynchronous,但由于某种原因execute(),除非 async 任务结束,否则您希望被阻止,这是错误的。您的代码工作正常,我希望 listMain 简单地为空,并且一旦execute()触发 asynctask,for将不会显示任何内容,因为异步任务尚未完成。您应该重新设计您的应用程序逻辑,以便异步任务可以告诉“主线程”它完成了。即将你的for循环移动到单独的方法并从onPostExecute().

于 2012-11-10T15:53:25.450 回答