2

以下は私のコードです。私の進捗状況をAsyntask onprogressUpdateメソッドで表示しようとしていますが、アラートダイアグラグには表示されません。最初のメッセージだけが表示されます。Asynctask内でAlertDialogのsetmessageが機能しない

class DownloadFileFromURL extends AsyncTask<String, String, String> { 

     private AlertDialog.Builder alert; 
     private int progress = 0; 
     /** 
     * Before starting background thread Show Progress Bar Dialog 
     */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      alert = new AlertDialog.Builder(context); 
      alert.setTitle("Downloading.."); 
      alert.setMessage("1"); 
      alert.setCancelable(false); 
      alert.show(); 
     } 

     /** 
     * Downloading file in background thread 
     */ 
     @Override 
     protected String doInBackground(String... f_url) { 
      int count; 
      try { 
       URL url = new URL(f_url[0]); 
       URLConnection conection = url.openConnection(); 
       conection.connect(); 

       // this will be useful so that you can show a tipical 0-100% 
       // progress bar 
       int lenghtOfFile = conection.getContentLength(); 

       // download the file 
       InputStream input = new BufferedInputStream(url.openStream(), 
         8192); 

       // Output stream 
       OutputStream output = new FileOutputStream(file); 

       byte data[] = new byte[1024]; 

       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        // After this onProgressUpdate will be called 
        publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 

        // writing data to file 
        output.write(data, 0, count); 
       } 

       // flushing output 
       output.flush(); 

       // closing streams 
       output.close(); 
       input.close(); 

      } catch (Exception e) { 
       Log.e("Error: ", e.getMessage()); 
      } 

      return null; 
     } 

     /** 
     * Updating progress bar 
     */ 
     @Override 
     protected void onProgressUpdate(String... progress) { 
      Log.d("Myapp","progress :"+progress[0]); 
      alert.setMessage(""+progress[0]); 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     **/ 
     @Override 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after the file was downloaded 
} 
} 

iもonProgressUpdateの進捗の更新を表示するログを書いてきたように、ログが印刷されたが、onProgressUpdateでalert.setMessageは私の警告ダイアログにメッセージを設定していないようです。

+0

から警告ダイアログを作成する必要があります参照してください。 – alway5dotcom

+0

setmessageは、alertdialogではなくbuilderを使用します。真ん中の引数型StringをIntegerに置き換えるのはどうですか? – iroiroys

+0

@iroiroys yeah私はそれがうまくいくと思っていたので間違っていました。そして、私は中間の引数型を整数に変更しました。ありがとう!! –

答えて

5

コードごとにalertAlertDialog.Builderで、AlertDialogではありません。これは、あなたが既に建築業者を示したが、AlertDialogに与えていないために変化しないかもしれない理由が私に懸念をもたらした。私は(これはAlertDialog.Builderある)alert.setMessageを使用し、メッセージは全く変化しなかった、まず

public class MainActivity extends AppCompatActivity { 

    private AlertDialog.Builder alert; 
    private AlertDialog ad; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     alert = new AlertDialog.Builder(this); 
     alert.setTitle("Downloading.."); 
     alert.setMessage("1"); 
     alert.setCancelable(false); 
     ad = alert.show(); 


     Log.d("SAMPLE", "SET MESSAGE 2"); 
     alert.setMessage("2"); 

     Log.d("SAMPLE", "SET MESSAGE 3"); 
     ad.setMessage("3"); 
    } 

} 

:だから私は、簡単なコードを試してみました。しかし、AlertDialogに入れて、AlertDialogインスタンスのメッセージを設定すると、メッセージが変更されました。このアプローチを試してみてください。 AlertDialog.Builderを、AlertDialogインスタンスを使用してに、次にsetMessageに渡します。

AlertDialogおよびAlertDialog.Builderのドキュメント。

これは何とか役立ちます。がんばろう。 :)

+0

次のように単純に使用できます:ad = new AlertDialog.Builder(this).create(); – Asama

+0

@Asama Yup。しかし、わかりやすくするために、私はこれをこの方法で行いました。 –

+0

これは魅力的なように働いてくれてありがとう.. !! –

0

あなたのコードでは、警告ダイアログを作成するのを忘れてしまいます。この

AlertDialog alertDialog = alert.create(); 
    alertDialog.show(); 

は、あなたが、私はそれがあなたの代わりにAlertDialogのProgressDialogを使用する場合より良いだろうと思いprivate AlertDialog.Builder alert;

+0

の問題を参照してください。それはalert.create()である必要があります – Asama

+0

@Asama上記のコードはサンプルコードであり、下位のものは両方とも異なるコードスニペットです – UserSharma

+0

@Asama今質問のコード – UserSharma

関連する問題