2017-06-27 11 views
-2

自分のアプリケーションをダウンロードしている間、私は、画像のダウンロードながらProgressDialogを追加しようとしていることのためにイメージをダウンロードするのに時間がかかるダウンロード機能を持っています。 ProgressDialog表示ProgressDialog画像は

に画像を保存するために、この私のコードを私を助けてください表示されません:。

private String saveImage(Bitmap image) { 
    ProgressDialog pd = new ProgressDialog(Pop.this); 
    pd.setMessage("Downloading ..."); 
    pd.show(); 
    String savedImagePath = null; 
    String imageFileName = "vapor"+System.currentTimeMillis()+ ".png"; 
    File storageDir = new File(
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 
        + "/vaporwave"); 
    boolean success = true; 
    if (!storageDir.exists()) { 
     success = storageDir.mkdirs(); 
    } 
    if (success) { 
     File imageFile = new File(storageDir, imageFileName); 
     savedImagePath = imageFile.getAbsolutePath(); 
     try { 
      OutputStream fOut = new FileOutputStream(imageFile); 
      image.compress(Bitmap.CompressFormat.PNG, 100, fOut); 
      fOut.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     // Add the image to the system gallery 
     galleryAddPic(savedImagePath); 
     Toast.makeText(Pop.this, "IMAGE SAVED", Toast.LENGTH_LONG).show(); 
     pd.dismiss(); 
    } 
    return savedImagePath; 
} 

答えて

0

あなたがあなたのUIスレッド上で複雑な作業を行うべきではない、AsyncTaskのようないくつかのバックグラウンドタスクを使用する必要があります(そうでない場合は、あなたのUIますあなたはおよそAsyncTask非同期で例えば

Hereを読むことができます

運タスクが完了するまで、ので、あなたのprogressDialogは表示されません):

1)onPreExecute

2であなたのprogressDialogを表示)とonPostExecute

3でそれを解任)とdoInBackgroundに()画像を保存する作業を行います(この方法では戻り値の型がonPostExecuteに渡します)

public class saveImage extends AsyncTask<Bitmap,Void,String>{ 
    ProgressDialog pd; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pd = new ProgressDialog(Pop.this); 
     pd.setMessage("Downloading ..."); 
     pd.show(); 
    } 

    @Override 
    protected String doInBackground(Bitmap... params) { 
     Bitmap image = params[0]; 
     String savedImagePath = null; 
     String imageFileName = "vapor"+System.currentTimeMillis()+ ".png"; 
     File storageDir = new File(
       Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 
         + "/vaporwave"); 
     boolean success = true; 
     if (!storageDir.exists()) { 
      success = storageDir.mkdirs(); 
     } 
     if (success) { 
      File imageFile = new File(storageDir, imageFileName); 
      savedImagePath = imageFile.getAbsolutePath(); 
      try { 
       OutputStream fOut = new FileOutputStream(imageFile); 
       image.compress(Bitmap.CompressFormat.PNG, 100, fOut); 
       fOut.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      // Add the image to the system gallery 
      galleryAddPic(savedImagePath); 
      Toast.makeText(Pop.this, "IMAGE SAVED", Toast.LENGTH_LONG).show(); 
      pd.dismiss(); 
     } 
     return savedImagePath; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     //s is your savedImagePath 
     pd.dismiss(); 
    } 
} 

あなたはこのように、このタスクを呼び出すことができます。

new saveImage().execute(yourBitmap); 
+0

回答ありがとう私は 'image.compress(Bitmap.CompressFormat.PNG、100、fOut)の' Bitmap Image'に問題があります; '私は' saved savedImagePath;に問題があります。 doInBackground – pic

+0

あなたのコードで私の答えベースを変更しました。更新されたsaveImageタスクを見てください。 – MHP

+0

ありがとうsoo多くはうまく動作します – pic