0

Android3.1以降のアプリケーションを開発しています。

SpringFrameworkを使用してRESTリクエストを行うためのスレッドを追加しました。これは私のコードです:

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ブロック内にダイアログを表示したい:

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

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

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

4

2 に答える 2

2

これをチェックしてください。スレッドのrunメソッドのすべてのコードをメソッド内に配置し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);
于 2012-04-12T16:33:59.173 に答える
0
runOnUiThread(new Runnable(){
public void run(){
////code for alert dialog
}
});

推奨されていませんが、使用できます。すべてのUIタスクを処理する別のスレッドを使用することをお勧めします。

于 2012-04-12T16:35:52.530 に答える