现在我正在做一个android应用程序。在那个应用程序中,我使用asynchtask类来解析json数据,我必须将这些值设置为ui.My程序是这样的。
class Activity
{
textview tv;
oncreate()
{
setcontentview(layout);
tv=(textview)findviewbyid(id);
call to pageload()
}
class PageLoad extends AsyncTask<String, Void, Boolean>
{
doInBackground()
{
json parsing
tv.setText(data);
}
}
}
但我无法设置pageload类的值。请帮助我的朋友。
答案 0 :(得分:2)
您需要了解doInBackground()在与UI不同的线程上运行,因此您无法在此处访问UI。 AsyncTask还有另外两种方法:
onPreExecute()
- 在doInBackground()
运行之前onPostExecute()
- 运行doInBackground()
后,可以收到doInBackground()您需要将doInBackground()
的结果传递给onPostExecute()
,然后您可以在其中设置TextView的文本。
我建议您阅读Google关于如何使用Asynctask的文章,该文章可以在http://developer.android.com/resources/articles/painless-threading.html找到并查看课程AsyncTask。
示例代码
private class MyAsynctask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
//do something heavy or resource intensive
String data = resultOfSomeWork();
return data;
}
protected void onPostExecute(String result) {
myTextView.setText(result);
}
}
答案 1 :(得分:2)
您还可以使用onProgressUpdate()
AsyncTask
您可以使用doInBackGround()中的publishProgress(values)
来调用它。
并在onProgressUpdate()的文本框中设置Text。
答案 2 :(得分:1)
您不能在AsyncTask的doInBack..()
中使用UI线程(作为其唯一的工作线程)。使用onPostExecute()
(如果您想在onPreExecute()
或onPostExecuted()
中进行任何与ui相关的更改)。
只需浏览Android-AsyncTask并查看其工作原理。
答案 3 :(得分:-2)
您无法从AsyncTask线程更新UI,它主要在主线程上完成。您可以使用handler。