2011-09-10 22 views
0

私のアプリでは、サーバからデータをフェッチしてデータベースに格納しようとしています。 これらの作業をすべて実行しているときは、progressdialogが表示されます。データが正常に取得された場合は、ダイアログが閉じる必要があり、いくつかのalertDialogがmsgの「正常にデータを取得」に表示されます。そこにn/w問題があれば、それは "n/w問題"という別のmsgを表示するはずです。私は以下のようにやっていることについてアンドロイドの進捗状況のダイアログ

public void onClick(View arg0) { 
       myProgressDialog = ProgressDialog.show(
         getParent(), "Please wait...", 
         "Doing upgrade...", true); 
       new Thread() { 
        public void run() { 
         try { 

         upgradeAll();//function where data fetched from server 

          sleep(5000); 

         } catch (Exception e) { 
         } 
         // Dismiss the Dialog 

         myProgressDialog.dismiss(); 


         Toast.makeText(UpgradeAllTableData.this, "Due to some internal problem \n" + 
           "it couldnot update..", Toast.LENGTH_LONG).show(); 
        } 

       }.start(); 
      } 

AsyncTaskコード、

private class UpgradeTask extends AsyncTask<Context, Void, Void> { 
     private ProgressDialog Dialog = new ProgressDialog(UpgradeAllTableData.this); 

     @Override 
     protected void onPreExecute() { 
      System.out.println("In onPreExecute "); 
      Dialog.setTitle("Loading"); 
      Dialog.setMessage("Please wait for few seconds..."); 
      Dialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Context... params) { 
      System.out.println("In doInBackground "); 

      upgradeAll(); 

      System.out.println("In doInBackground after fetching"); 
      return null; 
     } 

     @Override 
      protected void onPostExecute(Void unused) { 

      System.out.println("In onPostExecute "); 
      Dialog.dismiss(); 

      Toast.makeText(UpgradeAllTableData.this, "Problem with internet" , Toast.LENGTH_SHORT).show(); 
      alertboxNeutral("Warning", "Problem with Internet Connection", "Okay","Try again"); 

     } 
    } 

問題は、トーストが表示されていないです。どうして?

私の質問はどのような条件とどこで提供されるので、n/wに問題がある場合はいくつかのmsgと成功が表示され、次に別のmsgが表示されます。

ここでコードを書く必要がありますか? 私にいくつか提案してください。

はあなたの特定の質問に答えていない正確にあなたに

答えて

1

に感謝していますが、AsyncTaskを検討していますか?これは、あなたのような状況を処理するために設計されています。タスクは非同期で実行され、UIスレッド上でいくつかの進捗状況(および最終結果)が表示されます。代わりに、トーストがあなたのUIスレッドからも表示されるべきであるため、トーストを表示するためにインテントをブロードキャストし、アクティビティをキャッチすることができます。

更新: AsyncTaskリファレンス - http://developer.android.com/reference/android/os/AsyncTask.html

+0

ASyncTaskでこれを行いました。しかし、それは正しくwotkingしていません。 thatsなぜ私はスレッドで試した。 – Jyosna

+0

おそらく、AsyncTaskの実装が正しく機能していない理由について、AsyncTaskを間違って使用していた方がよいでしょう。または、UIスレッドにトーストを表示する機会を与えるために、常にインテント・ソリューションを使用することもできます。しかし、AsyncTaskの使用を強くお勧めします。 –

+0

私は私のasynctaskコードを与えるでしょう。ちょうど私が間違っている場所を確認してください? – Jyosna

1

何をやっているが、完全に間違っています。 UIスレッドはすべてのUIの変更を処理しますが、ここではUIスレッドでProgressDialogを作成し、他のスレッドでそのスレッドを終了します..解決策はAsyncTaskを使用します。http://developer.android.com/reference/android/os/AsyncTask.html

関連する問題