在我的应用程序中,我使用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);
有什么想法吗?
答案 0 :(得分:0)
实际上,它并没有以这种方式使用AsyncTask。
这真的不等你的结果:
values = asyncTask.execute().get();
使用AsyncTask,您可以调用execute()
方法,然后使用onPostExecuted
或onPostCancelled
方法,具体取决于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
}