2013-03-13 3 views
0

В моем приложении для Android я пытаюсь использовать задачу ASYNC ... всякий раз, когда я устанавливаю текст любого TextView EditText в doInBackground (...) .... Я получаю сообщение об ошибке, но когда я установил то же самое в OnCreate, он работает .. :( вот код:Ошибка в простой AsyncTask

public class RemoteFiles extends Activity { 



EditText etrmm ; 
TextView t; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_remote_files); 
    initVars();   
    new ConnectToServer().execute(null); 



} 
protected void initVars(){ 
    etrmm =(EditText)findViewById(R.id.etRM); 
    etrmm.setText("UnSET"); 
    t=(TextView)findViewById(R.id.RM); 
    t.setText("UnsET"); 
} 
public class ConnectToServer extends AsyncTask<String, Integer, Void> { 

    //private ProgressDialog pd = new ProgressDialog(RemoteFiles.this); 
    private ProgressDialog pdd ; 
    @Override 
    protected Void doInBackground(String... params) { 
     // TODO Auto-generated method stub 

     for(int i=0;i<20;i++){ 
      publishProgress(5); 
      try { 
       Thread.sleep(88); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     etrmm.setText("Edittext SET"); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     pdd.dismiss(); 

    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     // pd.setMessage("Connecting to server... "); 
     // pd.show(); 

     pdd = new ProgressDialog(RemoteFiles.this); 
     pdd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     pdd.setMax(100); 
     pdd.show(); 




    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     // TODO Auto-generated method stub 
     super.onProgressUpdate(values); 
     pdd.incrementProgressBy(values[0]); 

    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_remote_files, menu); 
    return true; 
}} 

здесь является расположение:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<TextView 
    android:id="@+id/RM" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 

    android:padding="@dimen/padding_medium" 
    android:text="@string/hello_world" 
    tools:context=".RemoteFiles" /> 

<EditText 
    android:id="@+id/etRM" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:ems="10" > 

    <requestFocus /> 
</EditText> 

LogCat говорит android.view.ViewRoot $ CalledFromWrongThread Исключение

ответ

0

Вы не можете сделать UI в doInBackground(). Это должно быть сделано любым другим способом. Для ваших целей, вероятно onPostExecture()

Посмотрите на AsyncDocs, doInBackground() не работает на главной (UI) нить

1

doInBackground (String ... Params) не работает на UI тему, так вы не можете установить текст для EditText там

, если вы хотите установить EditText значение, возвращает значение в doInBackGround и использовать значение параметра в onPostExecute и установить его в onPostExecute()

+0

Спасибо .. я получил это :) – 2013-03-13 18:57:25

0

AsyncTask на методы preExecute и onPostExecute запускают o UI Thread. Здесь вы можете вносить изменения в пользовательский интерфейс. doInBackground не работает в потоке пользовательского интерфейса. Он используется для выполнения длительных операций. Работает в фоновом потоке. Вы не можете обновить ui из фонового потока в doinBackground.

Установить текст в текстовом режиме в onPostExecute метод asynctask.

Документ на сайте разработчика содержит подробную информацию по теме под заголовком THE 4 STEPS. http://developer.android.com/reference/android/os/AsyncTask.html

Смежные вопросы