2010-12-06 7 views
1

ログインボタンを押したときにWebサービスコールがあり、Webサービスコール時に進捗ダイアログを表示し、Webサービスを受信した後に次のページにインテントを返します...しかし、意図もダイアログを進めると呼ばれる空白のページがあなたがAsyncTaskのヘルプ(インテリジェントbackroundのスレッド)でこれを行うとProgressDialogスレッドの実装

AsyncTaskは、UIスレッドの適切かつ容易な使用を可能にする必要があり

if(Utility.isNetworkAvailable(currActivity)){     
// Utility.showProgressDialog(currActivity); 
          new Thread() { 
           @Override 
           public void run() {        
            currActivity.runOnUiThread(new Runnable() { 
             @Override 
             public void run() { 
              Intent intent = new Intent(Login.this, Listviewer.class); 
              startActivity(intent); 
              tempSplashTread = new Thread() { // Thread for showing wait cursor 
               @Override 
               public void run() { 
                currActivity.runOnUiThread(new Runnable() { 
                 @Override 
                 public void run() { 
                  myProgressDialog = new ProgressDialog(InfraSignPdfList.this);  
                  myProgressDialog.setMessage("Loading...     "); 
                  myProgressDialog.show(); 
                 } 
                }); 
               } 
              }; 
              tempSplashTread.start(); 
              finish(); 
             } 
            }); 
           } 
          }.start(); 
         }else { 
          Utility.noNetworkDialog(currActivity);       
         } 
+3

コードを読み取り可能な形式にしてください。 –

答えて

2

アプリを起動する間に進捗ダイアログを表示するのは悪い考えです。ダウンロードしたデータに進捗ダイアログを実装し、ダウンロードしたデータが新しいアクティビティに渡された後に次のアクティビティを表示する必要があります。手順以下

フォロー:

1.Afterログインボタン現在の活動に続い表示progressDialogまでのサーバーからデータを取得するために、サーバーの呼び出しを開始します。

2.データがダウンロードされたら、必要なデータを渡して次のアクティビティを開始します。

2

が表示されません。このクラスを使用すると、スレッドやハンドラを操作することなく、バックグラウンド操作を実行し、UIスレッドで結果を公開できます。

非同期タスクは、バックグラウンドスレッドで実行され、その結果がUIスレッドで公開される計算によって定義されます。非同期タスクは、Params、Progress and Result、begin、doInBackground、processProgress、endの4つの一般的なタイプによって定義されます。

onPreExecute()

、タスクが実行された直後にUIスレッド上で呼び出さ:

4は、非同期タスクが実行されると、タスクは、4つのステップを経る

ステップ。このステップは通常、タスクを設定するために使用されます。たとえば、ユーザーインターフェイスにプログレスバーを表示します。

doInBackground(Params...) onPreExecute()の実行が終了した直後にバックグラウンドスレッドで呼び出されます。このステップは、バックグラウンド計算を実行するのに使用され、時間がかかることがあります。非同期タスクのパラメータは、このステップに渡されます。計算結果はこのステップで戻され、最後のステップに戻されます。このステップでは、publishProgress(Progress ...)を使用して、1つ以上の進行単位を公開することもできます。これらの値は、UIスレッドのonProgressUpdate(Progress ...)ステップで公開されます。

onProgressUpdate(Progress...)、publishProgress(Progress ...)の呼び出し後にUIスレッドで呼び出されます。実行のタイミングは未定義です。このメソッドは、バックグラウンド計算がまだ実行されている間に、ユーザーインターフェイスに進捗状況を表示するために使用されます。たとえば、プログレスバーをアニメートしたり、テキストフィールドにログを表示したりすることができます。

onPostExecute(Result)、バックグラウンド計算が終了した後にUIスレッドで呼び出されます。バックグラウンド計算の結果は、このステップにパラメータとして渡されます。 スレッドが

このクラスが正しく動作するために従わなければならないいくつかのスレッドのルールがあります。ルール:

タスクインスタンスは、UIスレッド上で作成する必要があります。 execute(Params ...)はUIスレッドで呼び出さなければなりません。 onPreExecute()、onPostExecute(Result)、doInBackground(Params ...)、onProgressUpdate(Progress ...)を手動で呼び出さないでください。 タスクは、(第2の実行が試行された場合、例外がスローされます。)一度だけ実行することができ

例コードアダプタは、この例では何 はあなたが必要とすることを理解することが、より重要なことは、重要ではありません
AsyncTaskを使用して進行状況のダイアログを表示します。

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > { 
    ProgressDialog dialog; 
    @Override 
    protected void onPreExecute() { 
     dialog = new ProgressDialog(viewContacts.this); 
     dialog.setMessage(getString(R.string.please_wait_while_loading)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#doInBackground(Params[]) 
    */ 
    @Override 
    protected ContactsListCursorAdapter doInBackground(Void... params) { 
     cur1 = objItem.getContacts(); 
     startManagingCursor(cur1); 

     adapter1 = new ContactsListCursorAdapter (viewContacts.this, 
       R.layout.contact_for_listitem, cur1, new String[] {}, new int[] {}); 

     return adapter1; 
    } 

    protected void onPostExecute(ContactsListCursorAdapter result) { 
     list.setAdapter(result); 
     dialog.dismiss(); 
    } 
} 
+0

私はtahtを試してみる – xydev

関連する問題