在我的应用程序中,我正在使用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()
方法,然后您拥有 onPostExecuted
或onPostCancelled
方法,具体取决于 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
}