AsynkTask 在 API 19 之后被应用程序中断



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

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

所以问题是所有这些都可以在 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);

有什么想法吗?

实际上,它不适用于 AsyncTask。

这不会真正等待您的结果:

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

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

顾名思义,AsyncTask它是异步的,这意味着它不会等待

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

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

这是另一种选择,当你的AsyncTask完成时,它会在Main中调用一个带有数据的方法。

在您的异步任务中:

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

在主活动中:

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

最新更新