在asynctask中添加textview值

时间:2012-03-23 11:45:19

标签: android android-asynctask

现在我正在做一个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类的值。请帮助我的朋友。

4 个答案:

答案 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