2010-12-16 27 views
0

私は進行状況メッセージをユーザーに表示する必要があります。しかし、私はそれを表示することができません。これは私のコードです。私のコードで何が問題なのですか。Androidで進捗状況ダイアログを表示する方法は?

public class MyProgressDemo extends Activity { 
/** Called when the activity is first created. */ 

private Button clickBtn; 
public ProgressDialog progressDialog; 
Handler handler = new Handler(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    clickBtn = (Button) findViewById(R.id.Button01); 
    clickBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      progressDialog = ProgressDialog.show(MyProgressDemo.this, "", 
        "Please Wait"); 
      processThread(); 

     } 

    }); 

} 

protected void processThread() { 

    handler.post(new Runnable() { 

     @Override 
     public void run() { 
      longTimeMethod(); 
      UI(); 
      progressDialog.dismiss(); 
     } 
    }); 

} 

private void longTimeMethod() { 
    try { 
     String strMethod = "MethodName"; 
     String strUrl = "url"; 
     String strResponse = WebserviceCall.Mobileaappstore(strUrl, 
       strMethod); 
     Log.d("RES", strResponse); 
    } catch (Exception e) { 
     Log.e("Exc", e.getMessage()); 
    } 

} 

private void UI() { 
    TextView tv = new TextView(this); 
    tv.setText("This is new UI"); 
    setContentView(tv); 
} 

}

答えて

1

Handler.postメソッドはUIスレッド内にスレッドを生成するので、longTimeMethod(); UIスレッドで実行され、ブロックされます。

protected void processThread() { 
    Thread t = new Thread(){ 
     longTimeMethod(); 
     // Sends message to the handler so it updates the UI 
     handler.sendMessage(Message.obtain(mHandler, THREAD_FINISHED)); 
    } 
    // Spawn the new thread as a background thread 
    t.start 
} 

メッセージ

private Handler mHandler = new Handler() { 
    @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 

      switch (msg.what) { 
      case THREAD_FINISHED: 
         UI(); 
         progressDialog.dismiss(); 
         break  
       } 
     } 
}; 

を管理するために、あなたはそれは、あなた次第仕事の両方だ、この溶液またはAsynTaskのいずれかを使用することができますあなたのハンドラは次のようになります。あなたはこのようにそれを行う必要があります。あなたに最も適したものを選んでください。

+0

あなたのKind Helpに感謝します! – RMK

0

あなたが完全にやろうとしていることはアンドロイドでAsyncTask frameworkにフィットします。 onPreExecute/onPostExecuteメソッドにすべてのUI関連のものを入れ、doInBackgroundメソッドで長時間メソッドを処理して、AsyncTaskクラスをサブクラス化して実装するようにしてください。

アクティビティの内容が必要な場合は、そのアクティビティをAsyncTaskのコンストラクタのパラメータとして渡すか、AsyncTaskをアクティビティの内部クラスとして使用します。

+0

ありがとうございました! – RMK

0

MarvinLabsの投稿に追加するには、ProgressDialogをこのように表示したり消したりできます。

private class SubmitCommentTask extends AsyncTask<String, Void, Void> { 
    ProgressDialog dialog; 
    protected Void doInBackground(String... params) { 
     // Your long running code here 
     return null; 
    } 

    protected void onPreExecute() { 
     dialog = ProgressDialog.show(DetailsInfo.this, "Submitting Comment", "Please wait for the comment to be submitted.", true); 
    } 

    protected void onPostExecute(Void Result) 
    { 
     dialog.dismiss(); 
    } 
} 
+0

あなたのKind Helpに感謝します! – RMK

関連する問題