2012-03-23 4 views
0

지금은 안드로이드 application.In 그 응용 프로그램에서 나는 json 데이터를 구문 분석하기 위해 asynchtask 클래스를 사용하고 있으며 그 값을 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의 텍스트를 설정할 수 있습니다.

http://developer.android.com/resources/articles/painless-threading.html에서 찾을 수있는 Asynctask 사용 방법에 대한 Google의 기사를 읽고 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

당신은 (유일한 작업자 스레드로) AsyncTask를의 doInBack..()에서 UI 스레드을 사용할 수 없습니다. 그것에 대해 onPostExecute()을 사용하십시오 (사용자가 관련 변경을 수행하려면 onPreExecute() 또는 onPostExecuted()).

그냥 Android-AsyncTask으로 가서 어떻게 작동하는지보십시오.

2

당신은 또한 당신은 당신의 doInBackGround에서 publishProgress(values)를 사용하여 호출 할 수 있습니다 onProgressUpdate()

AsyncTask의()을 사용할 수 있습니다.

그리고 onProgressUpdate()의 텍스트 상자에 텍스트를 설정하십시오.

관련 문제