2012-07-02 6 views
0

Я хочу обновить Text View, кок из AsycTask.Actually, что я делаюОбновление UIElement от AsycTask

я принимать данные от сервера и обратного результата в виде JSON, то я разобрать JSON и заполнить данные в два Spinner и один textview.How я могу обновить данные, когда я использую Asyctask beacuse TextView не update..Here мой код съязвил

TAG_CONFIG = "xyz" 
TAG_CONFIG1 = "yyy" 
JSONParser jParser = null; 
JSONObject json = null; 
jParser = new JSONParser(); 
json = jParser.getJSONFromUrl(url); 

try { 
    // Getting Array of Contacts 
    contacts = json.getJSONArray(TAG_CONFIG); 
    for (int i = 0; i < contacts.length(); i++) { 
     JSONArray c = contacts.getJSONArray(i); 
     CompanyName = new String[c.length()]; 
     for (int j = 0; j < c.length(); j++) { 
      CompanyName[j] = c.getString(j); 
     } 


    } 

похож на tab_confg1 ...

ответ

2

doInBackground не синхронизируется с основным UI thread ... таким образом, вы не можете напрямую обновлять ваш пользовательский интерфейс из этого метода (вместо этого вы должны использовать Handler или mContext.runOnUiThread()). Однако вы можете обновить свой интерфейс пользователя от onPostExecute, так как этот метод выполняется в потоке пользовательского интерфейса.

0

Используйте runOnUiThread для доступа к пользовательскому интерфейсу от не-UI-потока от doInBackground.

@Override 
protected String doInBackground(Void... params) { 
    Activity_Name.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        // your code here to access UI elements 

       } 
      }); 
    return "string"; 
} 
0

Попробуйте это ...

1. Всякий раз, когда мы начать приложение в Android, мы начать на Dedicated тему UI.

2. Создание любого потока выпадет один из Нити UI.

3. Ведение работы пользовательского интерфейса в потоке пользовательского интерфейса и работе Non-UI в Non-UI нити желательно, но продолжал быть правила с выпуском версии HoneyComb Android.

4. Хотя Non-UI поток может быть использован, чтобы отправить работу с ним в потоке пользовательского интерфейса с помощью обработчика, Android обеспечивает AsyncTask, который помогает в синхронизации работы, проделанной на резьбе Non-UI обратно в поток пользовательского интерфейса

в AsyncTask <>

--->doInBackground() будет обрабатывать РАБОТУ НЕ UI.

--->PostExectue() поможет в публикации работы NON-UI обратно в поток пользовательского интерфейса.