2011-07-25 12 views
0

これがアンドロイドでどのように行われているかを把握するのに問題があります。非常にシンプルなアプリケーションです.TextViewは画面の大部分を占め、ToggleButtonは下部に配置されています。ボタンを押すと、電話で5秒ごとに新しいデータを要求するソケットを介して通信が行われます。この新しいデータは、TextViewの先頭に追加する必要があります。AndroidアップデートUIのメインスレッドの問題

私はasynctaskを使用していましたがメインスレッドの外部のスレッドはTextViewを更新できませんでしたので、メインスレッドで5秒のタイマーやネットワークアクティビティを実行したくないためです。

ここに私がやっていることのための擬似コードがあります。新しいデータを受け取るたびにメインビューのスレッドからupdateViewが呼び出されるようにするにはどうすればよいですか? TextViewの

public class MyActivity { 
//setContentView 
//setup network connection 
//getTextView 
//getToggleButton 
    //when clicked on start asynctask GetData 
    //when clicked off stop GetData (set global boolean to false) 
} 

public void updateView(){ 

//take linked list and make one String of proper size for textview 
//setTextView 

} 

private class GetData extends AsyncTask { 

//while we want to get data (global boolean variable) 
    //send request 
    //wait for response 
    //*update global text variable for the view* 
    //sleep for 5 seconds 

} 

答えて

2

AsyncTaskonPostExecute()またはonProgressUpdate()の方法でこれを行うことができます。そこからUIの更新をトリガーすることができます。私はdoInBackground()でデータを取得すると仮定します。

2

AsyncTaskのための文字列の

Communication(IO) Variables 

LinkedListのはOnProgressUpdateと呼ばれる機能があります。オーバーライドしてここにコードを追加すると、UIスレッドで実行されます

OnProgressUpdate関数を呼び出すには、PublishProgressを呼び出します。

+0

私は複数の正解を選択できたら、それをしてくれてありがとう。ヘルプをよろしくお願いいたします。 – Michael

2

あなたが

protected void onProgressUpdate (Progress... values) 

publishProgress(Value...)新しいデータが受信されるたびに上書きする必要があります。

AsyncTaskのdoInBackground()メソッドはUIスレッドで実行されないため、UIを更新できません。

もう1つの方法はHandlerです。

+0

ありがとうございました。私が複数の正解を選ぶことができればと思います。ヘルプをよろしくお願いいたします。 – Michael

関連する問題