2012-04-12 6 views
0

私はAndroid 3.1以上のアプリケーションを開発しています。スレッド内にGUIスレッドでないダイアログを表示

Spring Frameworkを使用してRESTリクエストを作成するスレッドを追加しました。私はcatchブロック内のダイアログを表示したい

public class FormsListActivity extends ListActivity 
{ 
    private List<Form> forms; 
    private ProgressDialog progressDialog; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     progressDialog = ProgressDialog.show(this, "Please Wait.", "Loading forms..."); 
     getUpdates.start(); 
    } 

    private Thread getUpdates = new Thread() 
    { 
     public void run() 
     { 
      try 
      { 
       forms = FormSpringController.LoadAll(); 
       progressDialog.dismiss(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       //display = e.getLocalizedMessage(); 
      } 

      runOnUiThread(new Runnable() 
      { 
       public void run() 
       { 
        setListAdapter(new FormAdapter(FormsListActivity.this, R.layout.form_list_item, forms)); 

        ListView lv = getListView(); 
        lv.setTextFilterEnabled(true); 
       } 
      }); 
     } 
    }; 
} 

:これは私のコードです

catch (Exception e) 
{ 
    e.printStackTrace(); 
    //display = e.getLocalizedMessage(); 
} 

私はそれがあるdisplay変数のエラーを設定し、runOnUiThread(new Runnable()内でそれを確認すると考えられてきました。表示に値がある場合、ダイアログが表示されます。

あなたはどう思いますか?より良いアプローチはありますか?

+0

UIを更新したり、通常のスレッドからAlertDialogを表示することはできません。あなたはこれを行うにはUIのthreaを使用する必要があります – Ravi1187342

答えて

2

これをチェックしてください。 handleMessage(Message message)方法

private Handler handler = new Handler(){ 
     public void handleMessage(Message message){ 
      try 
      { 
       forms = FormSpringController.LoadAll(); 
       progressDialog.dismiss(); 
       setListAdapter(new FormAdapter(FormsListActivity.this, R.layout.form_list_item, forms)); 

       ListView lv = getListView(); 
       lv.setTextFilterEnabled(true); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       //display = e.getLocalizedMessage(); 
      } 

     } 
    } 

の内側にあなたのスレッドのrunメソッドのすべてのコードを入れて、

handler .sendEmptyMessage(0); 
0
runOnUiThread(new Runnable(){ 
public void run(){ 
////code for alert dialog 
} 
}); 

がrecommenedされていない、あなたのスレッドのrunメソッド内でこれを呼んでいますが、それを使用することができます。すべてのUIタスクを処理する別のスレッドを使用する方がよいでしょう。

+0

あなたの答えをありがとう。 「すべてのUIタスクを処理したスレッド」に関するサンプルコードをどこから見つけることができますか?ありがとう – VansFannel

+0

なぜgetUpdatesスレッドを使用していますか? 'FormSpringController.LoadAll()'がREST GET Requestである(そして、私はそれが同期呼び出しだと思うので) –

+0

です。ここで 'FormSpringController.LoadAll()'ソースコードを見ることができますhttp://stackoverflow.com/questions/10073290/expected-begin-array-but-was-begin-object-with-an-array-of-three-elements – VansFannel

関連する問題