2012-05-04 5 views
0

私のアプリケーションでは、ネットワークのデータに応じてUIのテキストを更新する必要があります。そのためには、AsyncTaskをバックグラウンドで使用していますアンドロイド。私のコードは以下の通りです。私はテキストがUIに更新されていないfalse.Butとしてブール値を取得するまでのバックグラウンドスレッドを実行することができています上記のコードでUIのテキストをAndroidのバックグラウンドスレッドから更新する方法

public class DefaultActivity extends Activity{ 

    TextView textView; 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    textView=(TextView)findViewById(R.id.textId); 
    new networkFileAccess().execute("background","Progress","result"); 
    } 

    private class networkFileAccess extends AsyncTask<String,String,String>{ 

    protected String doInBackground(String... background){ 
     return changeText(); 
    } 

    private String changeText(){ 
    //Code to Access data from the Network. 
    //Parsing the data. 
    //Retrieving the boolean Value. 
    if(booleanistrue){ 
     //Displaying some text on the UI. 
     publishProgress("someTextOnUI"); 
     //Send request till we get get boolean value as false. 
     changeText(); 
    }else{ 
     return "success"; 
    } 
     return ""; 
    } 

    protected void onProgressUpdate(String... progress){ 
     textView.setText("Wait background work is going on"); 
    } 

    protected void onPostExecute(String result){ 
     if(result.equals("success")){ 
     //Code to finish the activity. 
     } 
    } 
    } 

}

onProgressUpdate()メソッドを使用してUIのテキストを更新することはできますか?publishProgressメソッドを呼び出すことができます。

答えて

9

publishProgress()メソッドを呼び出しますが、テキストが表示されないで)(onProgressUpdateでテキストを更新IAMこの

runOnUiThread(new Runnable() { 
public void run() { 
    tv.setText("ABC"); 
} 
}); 
+0

ありがとうございました。 – user1195614

7

AsyncTaskでは、onPostExecute()とonPreExecute()の両方がUIスレッドで実行されます。したがって、onPostExecute()メソッドのテキストを変更することができます。スレッドで実行

それとも、また、doInBackgroundでrunOnUiThreadを呼び出すことができます()メソッドは:

runOnUiThread(new Runnable() { 
    public void run() { 
     // change text 
    } 
}); 

これは、UIスレッド上で実行するために実行可能なポスト。

4

私は簡単な答えは、はい、onProgressUpdateメソッドでUI要素を更新できることです。 OnProgressUpdateはUIスレッド自体で実際に呼び出されるため、何もする必要はありません。

「Wait background work is going」にハードコードされていると、あなたのonProgressUpdateが機能していないことをどのように知っていますか?

また、ProgressDialogを使用して「Wait background work is going」メッセージをユーザーに表示しない理由はありますか?あなたが実際に待つことを望むのであれば、通常はもっと直感的です。これは、作業が完了していることを知らせるスピナーまたはプログレスバー(あなたの選択)を表示します。また、アプリケーションの処理が完了するまで、他の処理を行わないようにする手段としても機能します。

+0

こんにちはGophermofurようrunonUiTHREAD中にあなたのUI方法を置きます。 – user1195614

+0

ここでは、サイトのメンテナンスに関するテキストを表示する必要があり、それはブールvalue.Ifに依存しますが、私はテキストを表示する必要がある場合は、私は活動を終了する必要があります。 – user1195614

+0

publishProgressメソッドに入ってもよろしいですか?あなたは、あなたのコーディングがどこに行くのか見ていくつかのLogステートメントを入れてみましたか? – Gophermofur

関連する問題