2012-03-23 73 views
0

现在我正在做一个android应用程序。在那个应用程序中,我使用asynchtask类来解析json数据,我必须将这些值设置为ui.My程序是这样的。在asynchtask中添加textview值

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类设置值。请帮助我的朋友。

回答

2

您需要了解doInBackground()在UI的另一个线程上运行,因此您无法在此处访问UI。的AsyncTask还有其他两种方法:

  • onPreExecute() - doInBackground()运行
  • onPostExecute()前 - 运行doInBackground()后,可以接收()

你需要通过由doInBackground所做的工作的结果doInBackground()onPostExecute()的结果,然后您可以设置TextView的文本。

我建议你阅读谷歌有关如何使用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); 
    } 
} 
-2

您无法从AsyncTask线程更新UI,它大部分都是在主线程上完成的。您可以使用handler

1

不能使用UI线程中的AsyncTask的doInBack..()(作为其唯一的工作线程)。使用onPostExecute()(如果您想在onPreExecute()onPostExecuted()中做任何与UI相关的更改)。

只要通过Android-AsyncTask并看看它是如何工作的。

2

你也可以用onProgressUpdate()AsyncTask

可以使用publishProgress(values)从doInBackGround称之为()。

并在onProgressUpdate()中的文本框中设置文本。