2012-03-23 66 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()中的文本框中設置文本。