JonSkeet 2013-04-08 05:09 采纳率: 0%
浏览 2669

Android:显示进度对话框

我在做一个 android 应用程序,该应用程序将得到更新。我要做一个简单的功能可以下载文件并显示 ProgressDialog 中当前的进度。我知道如何下载文件,但是不知道如何显示当前进度。下面的代码是下载图像的。

public Bitmap DownloadFile(String url){
URL myFileUrl;
Bitmap bitmap=null;
try {
myFileUrl = new URL(imageUrl);
    HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
    conn.setDoInput(true);
    conn.setConnectTimeout(10000);
    conn.setReadTimeout(10000);
    conn.connect();
    InputStream is = conn.getInputStream();
    bmImg = BitmapFactory.decodeStream(is);
    bitmap = BitmapFactory.decodeStream((InputStream) new URL(  
         imageUrl).getContent()); 
    bitmap = Bitmap.createScaledBitmap(bitmap,80 , 80, true);
    System.out.println("name of butmap"+bitmap.toString());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;

}

async task class :

   int myProgress;
    @Override
     protected void onPostExecute(Bitmap result) {
    dialog.dismiss();
    iv.setVisibility(View.VISIBLE);
    iv.setImageBitmap(result);
    System.out.println("bbbbbbbbb");
    System.out.println("post execute");
    }
@Override
protected void onPreExecute() {
    System.out.println("pre execute");
    dialog = ProgressDialog.show(ProfileNormalUserPhotos.this, "Loading...", "Please wait...");

}
 @Override
protected Bitmap doInBackground(String...paths) {
    System.out.println(imageUrl+"  imageurl");
    return DownloadFile(imageUrl);
      }
@Override
protected void onProgressUpdate(Integer... values) {
    // TODO Auto-generated method stub
        progressBar.setProgress(values[0]);
}
    }

在下面的 adapter 类中调用:

 public class ImageAdapter extends BaseAdapter {  
       Context mContext;
   public String[] stringOnTextView;
      public ImageAdapter(Context c) {  
       mContext = c;  
     }  
  public ImageAdapter(Context Context,
    String[] stringOnTextView) {
    this.mContext=Context;
    this.stringOnTextView=stringOnTextView;
}

public int getCount() {  
      return stringOnTextView.length;  
     }  
public Object getItem(int position) {  
      return null;  
     }  
      public long getItemId(int position) {  
      return position;  
     }  
      public View getView(int position, View convertView, ViewGroup parent) {
         View v = null;
        if(convertView==null){
             try{

            {
                  LayoutInflater li = getLayoutInflater();
                  v = li.inflate(R.layout.icon, null);
                  TextView tv = (TextView)v.findViewById(R.id.text);
                  tv.setText("Profile Image "+(position+1));
                   iv= (ImageView)v.findViewById(R.id.image);
                   imageUrl = "http://ondamove.it/English/images/users/";
                  imageUrl=imageUrl+stringOnTextView[position];
                   new BackgroundAsyncTask().execute(imageUrl);

                   }
           }catch (Exception e) {
            e.printStackTrace();
            System.out.println(e);
        }
        }
        else
        {
            try{
            v = convertView;}
            catch(Exception e){
                System.out.println(e);
            }
        }
        return v;
    }
}

我需要下载9幅图像,但是现在只显示最后一幅图像,进度对话框进入无限循环,如何处理?

  • 写回答

1条回答 默认 最新

  • Curie-87 2013-04-09 09:25
    关注

    我的解决方案是:

    class DownloadFileAsync extends AsyncTask<String, String, String>
    {
        int count;
        URL myFileUrl;
        ImageView imageview;
        Bitmap bp;
    
        public DownloadFileAsync(ImageView iv, URL uu)
        {
            this.imageview = iv;
            this.myFileUrl = uu;
        }
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
            showDialog(DIALOG_DOWNLOAD_PROGRESS);
        }
        @Override
        protected String doInBackground(String... aurl)
        {
            for (int i = 0; i < aurl.length; i++)
                System.out.println("----------" + i + "------" + aurl[i]);
    
            try
            {
                HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
                conn.setConnectTimeout(10000);
                conn.setReadTimeout(10000);
                conn.connect();
                InputStream is = conn.getInputStream();
                bmImg = BitmapFactory.decodeStream(is);
                bp = BitmapFactory.decodeStream((InputStream) (myFileUrl).getContent());
                bp = Bitmap.createScaledBitmap(bp, 70, 70, true);
    
            }
            catch (Exception e)
            {
                System.out.println(e);
                e.printstacktrace();
            }
            return null;
        }
        protected void onProgressUpdate(String... progress)
        {
            dialog.setProgress(Integer.parseInt(progress[0]));
        }
        @Override
        protected void onPostExecute(String unused)
        {
            try
            {
                imageview.setImageBitmap(bp);
                System.out.println("this is" + this);
                // dialog.dismiss();
                dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
            }
            catch (Exception e)
            {
                System.out.println(e);
            }
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?