2010-12-16 6 views
0

J'ai besoin de montrer le progrès Message à l'utilisateur.Mais je ne peux pas montrer cela.Voici mon code.Quel est le problème dans mon code.Guide de faire.comment afficher la progression Dialogue dans 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); 
} 

}

Répondre

1

Procédé Handler.post, frayer un thread dans le thread d'interface, de sorte que votre longTimeMethod(); sera exécuté dans le thread de l'interface utilisateur, le bloquant ainsi. Vous devriez le faire comme ceci:

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 
} 

Votre gestionnaire devrait ressembler à ceci afin de gérer le message

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

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

Vous pouvez utiliser cette solution ou AsynTask, il est à vous, travaillent tous les deux. Choisissez celui qui s'adapte le mieux à vous.

+0

Merci pour votre aide aimable !! – RMK

0

Ce que vous essayez de faire parfaitement à la AsyncTask framework dans Android. Essayez de l'implémenter en sous-classant la classe AsyncTask, en prenant soin de mettre toutes les choses liées à l'interface utilisateur dans les méthodes onPreExecute/onPostExecute et la méthode long dans la méthode doInBackground.

Si vous avez besoin d'éléments de l'activité, passez-le en tant que paramètre dans le constructeur de la tâche AsyncTask ou placez votre tâche asynchrone en tant que classe interne de l'activité.

+0

Merci pour votre aide aimable !! – RMK

0

Pour ajouter à la publication de MarvinLabs, vous pouvez afficher et ignorer le ProgressDialog comme ceci.

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

Merci pour votre aide aimable !! – RMK

Questions connexes