API 19之后,应用程序会中断异步任务

时间:2015-04-19 10:46:49

标签: android android-asynctask

在我的应用程序中,我使用AsynkTask(私有内部类)发送"帖子"请求,然后将结果放入数组并返回此数组。所有这些都发生在doInBackground()。

通过asyncTask.execute().get();在onCreate方法中调用AsynkTask。

所以问题是所有这些都完全适用于API19下的Android版本。但是在API19之后的版本中,应用程序不会等待asyncTask.execute().get();的结果。

提前致谢。 的onCreate:

        MyAsyncTask asyncTask;
        asyncTask = new MyAsyncTask();
        values = asyncTask.execute().get(); // Not waiting for the result
        for (int i = 0; i < values.length; i++) {
            listArr.add(values[i]); // So it gives me exception that "values" is null
        }
    adapter = new CustomListAdapter(this, items, imgs, values);
    list = (ListView) findViewById(R.id.list);
    list.setAdapter(adapter);

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

实际上,它并没有以这种方式使用AsyncTask。

这真的不等你的结果:

values = asyncTask.execute().get();

使用AsyncTask,您可以调用execute()方法,然后使用onPostExecutedonPostCancelled方法,具体取决于AsyncTask是否已完成或取消。在那里,您可以将结果交还给来电者。

正如名称AsyncTask已经暗示的那样,它是异步,这意味着它不会等待

我强烈建议您阅读Google的AsyncTask docs ...

答案 1 :(得分:0)

您可以使用此库轻松快速地从服务器获取数据。 https://github.com/AsyncHttpClient/async-http-client

答案 2 :(得分:0)

这是另一种选择,当您的AsyncTask完成时,它会使用数据调用Main中的方法。

在AsyncTask中:

@Override
protected void onPostExecute(List<YourData> result) {
    ((MainActivity) activity).updateUI(result);
}

在MainActivity中:

public void updateUI(List<YourData> result) {
    // process your data
}