【问题标题】:Android - Show progress dialogue while waiting for imageview from a URLAndroid - 在等待来自 URL 的图像视图时显示进度对话框
【发布时间】:2013-06-15 13:34:16
【问题描述】:

我正在从 URL 加载图像视图,并希望在等待图像加载时显示进度对话框,当我运行应用程序时,porgress 对话框出现半秒钟然后消失,与此无关图像的状态。如何使进度对话框仅在加载图像后消失?

下面是我的代码

//below is the download image task****************************************

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
      ImageView bmImage;

      public DownloadImageTask(ImageView bmImage) {
          this.bmImage = bmImage;
      }

      protected Bitmap doInBackground(String... urls) {
          String urldisplay = urls[0];
          Bitmap mIcon11 = null;
          try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
          } catch (Exception e) {
              Log.e("Error", e.getMessage());
              e.printStackTrace();
          }
          return mIcon11;
      }

      protected void onPostExecute(Bitmap result) {
          bmImage.setImageBitmap(result);
      }
    }

// above is the download imagetask ****************************************************

public class MyTask extends AsyncTask<Void, Void, Void> {
      private ProgressDialog progress;

    public MyTask(ProgressDialog progress) {
        this.progress = progress;
      }

      public void onPreExecute() {
        progress.show();
      }

      public void onPostExecute(Void unused) {

          progress.dismiss();
      }

    @Override
    protected Void doInBackground(Void... params) {
         new DownloadImageTask((ImageView) findViewById(R.id.ivget))
            .execute("http://dieboltdesigns.files.wordpress.com/2011/07/tom-brady-beast-poster-copy.png");

    //above makes the progress bar
        return null;
    }
    }

如果您需要 doinbackgound 方法/异步任务,请在 cmets 中告诉我

谢谢

【问题讨论】:

  • 你从 url 得到结果了吗?
  • @Segi 如果您询问图像是否加载,答案是肯定的
  • 始终以 postexecute 方法填充 UI..
  • 你在哪里设置你正在下载表单 URL 的图像?

标签: java android url android-asynctask progressdialog


【解决方案1】:

如果我没记错的话,问题是你在AsyncTask 中使用了AsyncTaskDownloadImageTask 是另一个独立于当前线程的线程。那就是问题所在。

只需将DownloadImageTask的所有代码写在MyTask中即可。

编辑

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
  ImageView bmImage;
  ProgressDialog pd;
  Context mContext;

  public DownloadImageTask(Context context,ImageView bmImage) {
      this.bmImage = bmImage;
      mContext = context;
  }

  public void onPreExecute() {
      pd = ProgressDialog.show(mContext, "dialog title","dialog message", true);   
  } 

  public void onPostExecute(Bitmap result) {
      pd.dismiss();
      if(result!=null)
          bmImage.setImageBitmap(result);
  }

  protected Bitmap doInBackground(String... urls) {
      String urldisplay = urls[0];
      Bitmap mIcon11 = null;
      try {
        InputStream in = new java.net.URL(urldisplay).openStream();
        mIcon11 = BitmapFactory.decodeStream(in);
      } catch (Exception e) {
          Log.e("Error", e.getMessage());
          e.printStackTrace();
      }
      return mIcon11;
  }
}

【讨论】:

  • 我发布了我的下载异步任务,你认为你可以合并它们并为我重新发布吗?
  • 只需将显示对话框粘贴到DownloadImageTask 而不是MyTask。这会很好。删除任何你喜欢的。只是不要在Async 中使用Async
  • :D 现在我要说点什么.....和我的有什么不同?您回答将代码写入 MyTask 并使用另一个进行编辑:D
  • 没问题。只是放松和享受......所以点不是我们的生活和知识。你的分数比我的少……但这并不意味着你知道的比我少。正确的?所以就在这里尽情享受吧。我正在删除我的答案,因为你值得接受。
  • @ChintanRathod 谢谢!只要我有 15 个代表,我就会对此投赞成票
猜你喜欢
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
相关资源
最近更新 更多