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;
}
以下是我的异步任务类:
public class BackgroundAsyncTask extends AsyncTask<String, Integer, Bitmap> {
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]);
}
}
我正在调用以下适配器类中的方法:
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 个图像,但我面临的问题是它只显示最后一个图像,并且进度对话框进入无限循环。
谁能告诉我如何解决 thios 问题。
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您还记得的话,我已经建议您之前使用 AsyncTask 来解决您的问题。
浏览这个示例并理解它并以您的方式实现它: 带有进度对话框的AsyncTask
I have already suggested you to use AsyncTask previously for your problems if you remember.
Go through this example and understand it and implement it in your way: AsyncTask with Progress Dialog
我通过研究得到了解决方案,以下应该是解决方案:
I got the solution by working on it and the following should be the solution for this:
您必须使用 AssyncTask 才能轻松地将进度传达给用户界面线程。
对于对话框,使用 ProgressDialog:
对于 AssycTask,使用内部您的活动中的课程:
You have to use an AssyncTask to be able to easily communicate progress to the UI thread.
For the dialog, use ProgressDialog:
And for the AssycTask, use an inner class in your Activity:
好的,我在这里看到两个潜在的问题..
您必须为您的适配器使用支架类型的结构。
在 asyncTask 中,imageView 对于 listView 中的每个项目应该是不同的。基本上,您必须将 imageView 作为参数传递给 asyncTask。
我换了你的适配器,你看一下。
还有这里的 asyncTask。我创建了一个构造函数并传递 imageView 作为参数。
但我仍然不能保证无限循环的解决方案,但解决其他一些问题总是好的:)
HTH。
ok, i see 2 potential problems here ..
you have to use holder kind of structure for your adapter.
in asyncTask, the imageView, should be different for each item in the listView. basically, you have to pass imageView as an argument to asyncTask.
I changed your adapter, have a look at it.
And also the asyncTask here. I made a constructor and passed imageView as argument.
but i still can't guarantee the solution to infinite loop, but it is always good to fix some other problems :)
HTH.