2012-03-01 5 views
0

私は、Client1.javaとClient2.javaという2つのアクティビティを持っています。アンドロイドのプログレスダイアログの同期

Client1コマンドを実行するためにリモートホストとtcp/ip接続を作成します。サーバはClient1に出力を返します。出力はClient2アクティビティに表示されます。リモートサーバーから出力をClient1アクティビティに戻すのにある程度時間がかかるので、出力がサーバーからClient1アクティビティに完全に返されるまで、progreesDialogを使用していくつかの進捗状況を表示しました。

出力がClient1アクティビティに完全に返されるたびに同期が必要です。progressDialogが完了し、Client2がリモートサーバーから受信した出力を表示し始めます。

答えて

0

AsyncTaskは、AndroidでPainless threadingとして知られている非同期スレッドを実装するコンセプトです。これを実装すると、スレッド管理について気にする必要がないためです。

これで、ロジックを特定のメソッドの中に書くだけでよいのです。例えば

  1. onPreExecute() - あなたは進捗ダイアログを表示します。

  2. doInBackground() - 長期実行タスクを記述する必要がある場合、リモート呼び出しロジックがここに入ります。

  3. onPostExecute() - Client2アクティビティを開始するためのコードを記述し、ダイアログを閉じる必要がある場所。

0

Pareshが正しい!例を見てください...

private class SessionTask extends AsyncTask<String, Integer, Integer> { 

    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     dialog = new ProgressDialog(TestUI.this); 
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setTitle("UploadFile"); 
     dialog.setMessage("Uploading file..."); 
     dialog.setCancelable(false); 
     dialog.setProgress(0); 
     dialog.show(); 
    } 

    @Override 
    protected Integer doInBackground(String... params) { 
     ......... 
     } catch(MalformedURLException e) { 
      Log.e(TestUI.TAG, "E: Malformed URL! " + e.getLocalizedMessage()); 

      return 1; 
     } catch(IOException e) { 
      Log.e(TestUI.TAG, "E: I/O error! " + e.getLocalizedMessage()); 
     return 2; 
     } 
     return 0; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     dialog.setMax(values[1]); 
     dialog.setProgress(values[0]); 

    } 

    @Override 
    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 
     dialog.dismiss(); 
     switch (result) { 
     case 0: 
      Toast.makeText(TestUI.this, "Uploading finished", Toast.LENGTH_LONG).show(); 

      new DownloadTask().execute(new String[] {TestUI.LINK_DOWN, TestUI.FILE_DOWN}); 
      break; 
     case 1: 
      Toast.makeText(TestUI.this, "E: Malformed URL!", Toast.LENGTH_LONG).show(); 
      break; 
     case 2: 
      Toast.makeText(TestUI.this, "E: I/O error! Connection was dismissed!!!", Toast.LENGTH_LONG).show(); 

      break; 
     } 
    } 
} 
関連する問題