没有相应的工作进度的Android [英] Android progress not working accordingly
问题描述
我是新来的Android和Java。我一直对我的任务即,图像下载。在那里我与进度栏下载图像,并在网格中显示它们。我创建了两个类
1. URLImageAdapter
2. CacheActivity。
一切工作正常,但之前,我点击下载按钮,当我在下载按钮会显示进度条和进度单击直到百消失,但仍然在下载是下载开始。我希望同步下载图像和进度条。
code以下。任何帮助
公共类URLImageAdapter延伸BaseAdapter {私有类图片{
字符串URL;
位图大拇指;
}私人图片[]图像;
私人语境myContext;
私人LoadThumbsTask thumbnailGen;
私有对象previousList;公共URLImageAdapter(上下文C){
myContext = C;
thumbnailGen =新LoadThumbsTask(); 如果(previousList!= NULL){
照片=(图片[])previousList;
thumbnailGen.execute(图像);
返回;
} 照片=新的图像[imageURLs.length] 的for(int i = 0,J = imageURLs.length; I<焦耳;我++){
图像[i] =新的图像();
图像[I]的.url = imageURLs [I]
} thumbnailGen.execute(图像);}公众诠释的getCount(){
返回images.length;
}公共对象的getItem(INT位置){
返回图像[位置]的.url;
}众长getItemId(INT位置){
返回的位置;
}公共对象的getData(){
如果(thumbnailGen!= NULL
&功放;&安培; thumbnailGen.getStatus()!= AsyncTask.Status.FINISHED){
thumbnailGen.cancel(真);
} 返回图像;
}公共查看getView(INT位置,查看convertView,父母的ViewGroup){ ImageView的imgView; 图像缓存=图像[位置] 如果(convertView == NULL){ imgView =新ImageView的(myContext);
imgView.setLayoutParams(新GridView.LayoutParams(100,100)); }其他{ imgView =(ImageView的)convertView; } 如果(cached.thumb == NULL){ imgView.setImageResource(R.drawable.ic_action_search);
imgView.setScaleType(ScaleType.CENTER); }其他{ imgView.setScaleType(ScaleType.FIT_CENTER);
imgView.setImageBitmap(cached.thumb); } 返回imgView;
}私人无效cacheUpdated(){
this.notifyDataSetChanged();
}
私人位图loadThumb(字符串URL){ 位图拇指= NULL; BitmapFactory.Options选择采用=新BitmapFactory.Options();
opts.inSampleSize = 4; 尝试{ URL U =新的URL(网址);
URLConnection的C = u.openConnection();
c.connect(); 的BufferedInputStream流=新的BufferedInputStream(
c.getInputStream()); 拇指= BitmapFactory.de codeStream(流空,选择采用);
stream.close(); }赶上(MalformedURLException的E){
Log.e(ERROR,恶意网址:+网址);
}赶上(IOException异常五){
Log.e(ERROR,发生了错误下载的形象:
+网址);
} 返回大拇指;
}私有类LoadThumbsTask扩展的AsyncTask<图像,太虚,太虚> { @覆盖
保护无效doInBackground(图像...缓存){ BitmapFactory.Options选择采用=新BitmapFactory.Options();
opts.inSampleSize = 4; 对于(图像I:缓存){ 如果(isCancelled())
返回null; 如果(i.thumb!= NULL)
继续; SystemClock.sleep(500); i.thumb = loadThumb(i.url); publishProgress();
} 返回null; } @覆盖
保护无效onProgressUpdate(无效...参数){
cacheUpdated();
}
}私有String [] = imageURLs {
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2851.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2944.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2989.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3005.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3012.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3034.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3047.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3092.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3110.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3113.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3128.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3160.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3226.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3228.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3251.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3268.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3275.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3346.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3365.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3374.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3385.jpg
http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3392.jpg};
}
CacheActivity
块引用>公共类CacheActivity延伸活动{按钮btnStartProgress;
ProgressDialog进度;
私人INT progressBarStatus = 0;
私人处理程序progressBarHandler =新的处理程序();私人长期档案大小= 0;@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_cache);
GridView控件的GridView =(GridView控件)findViewById(R.id.grid_view);
gridview.setAdapter(新URLImageAdapter(本));
addListenerOnButton(); }公共无效addListenerOnButton(){ btnStartProgress =(按钮)findViewById(R.id.btnStartProgress);
btnStartProgress.setOnClickListener(新OnClickListener(){ 公共无效的onClick(视图v){ 进度=新ProgressDialog(v.getContext());
progressBar.setCancelable(真);
progressBar.setMessage(文件下载...);
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show(); progressBarStatus = 0; 档案大小= 0; 新主题(新的Runnable接口(){
公共无效的run(){
而(progressBarStatus< 100){ progressBarStatus = doInBackground(); 尝试{
视频下载(1000);
}赶上(InterruptedException的E){
e.printStackTrace();
} progressBarHandler.post(新的Runnable(){
公共无效的run(){
progressBar.setProgress(progressBarStatus);
}
});
} 如果(progressBarStatus> = 100){ 尝试{
视频下载(200);
}赶上(InterruptedException的E){
e.printStackTrace();
} progressBar.dismiss();
}
}
})。开始(); } });}公众诠释doInBackground(){ 而(档案大小< = 1000000){ 档案大小++; 如果(档案大小== 100000){
返回10;
}否则如果(档案大小== 200000){
返回20;
}否则如果(档案大小== 300000){
返回30;
}否则如果(档案大小== 400000){
返回40;
}否则如果(档案大小== 500000){
返回50;
}否则如果(档案大小== 600000){
返回60;
}否则如果(档案大小== 700000){
返回70;
}否则如果(档案大小== 800000){
返回80;
}否则如果(档案大小== 900000){
返回90;
} } 返回100;}}
解决方案在使用下载图片
公共类LoginProgress扩展的AsyncTask<对象,对象,对象> {
私人ProgressDialog对话框;
@覆盖
在preExecute保护无效(){
this.dialog = ProgressDialog.show(ApplicationContext时请等待下,
加载.....,真正的);
}
@覆盖
保护对象doInBackground(对象... PARAMS){
// TODO自动生成方法存根
返回null;
}
@覆盖
保护无效onPostExecute(虚空未使用){
//意向的下一个活动
this.dialog.dismiss();
} }这些类按一下按钮创建对象
LoginProgress任务=新LoginProgress();
task.execute();调用乌尔doInBackground方法在这些doinbackground梅索德
做,否则下面的两个
增量视频下载的时间(1000);改变了Thread.sleep(4000);
视频下载(200);改变了Thread.sleep(450);您设置gridview.setAdapter(新URLImageAdapter(CacheActivity.this));
末写
在OnCreate中,删除该适配器的OnCreate,并在上点击的方法...I'm new to Android and Java. I have been working on my task i.e, Image Downloader. Where I have to download images with progress bar and display them in grid. I have created two classes 1. URLImageAdapter 2. CacheActivity. Everything works fine but download begins before I click on download button and when I click on download button the progress bar appears and progress till hundred vanishes but still downloading is on. I want to synchronize downloading images and progress bar.
Code Below. Any Help
public class URLImageAdapter extends BaseAdapter { private class Image { String url; Bitmap thumb; } private Image[] images; private Context myContext; private LoadThumbsTask thumbnailGen; private Object previousList; public URLImageAdapter(Context c) { myContext = c; thumbnailGen = new LoadThumbsTask(); if (previousList != null) { images = (Image[]) previousList; thumbnailGen.execute(images); return; } images = new Image[imageURLs.length]; for (int i = 0, j = imageURLs.length; i < j; i++) { images[i] = new Image(); images[i].url = imageURLs[i]; } thumbnailGen.execute(images); } public int getCount() { return images.length; } public Object getItem(int position) { return images[position].url; } public long getItemId(int position) { return position; } public Object getData() { if (thumbnailGen != null && thumbnailGen.getStatus() != AsyncTask.Status.FINISHED) { thumbnailGen.cancel(true); } return images; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imgView; Image cached = images[position]; if (convertView == null) { imgView = new ImageView(myContext); imgView.setLayoutParams(new GridView.LayoutParams(100, 100)); } else { imgView = (ImageView) convertView; } if (cached.thumb == null) { imgView.setImageResource(R.drawable.ic_action_search); imgView.setScaleType(ScaleType.CENTER); } else { imgView.setScaleType(ScaleType.FIT_CENTER); imgView.setImageBitmap(cached.thumb); } return imgView; } private void cacheUpdated() { this.notifyDataSetChanged(); } private Bitmap loadThumb(String url) { Bitmap thumb = null; BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 4; try { URL u = new URL(url); URLConnection c = u.openConnection(); c.connect(); BufferedInputStream stream = new BufferedInputStream( c.getInputStream()); thumb = BitmapFactory.decodeStream(stream, null, opts); stream.close(); } catch (MalformedURLException e) { Log.e("ERROR", "malformed url: " + url); } catch (IOException e) { Log.e("ERROR", "An error has occurred downloading the image: " + url); } return thumb; } private class LoadThumbsTask extends AsyncTask<Image, Void, Void> { @Override protected Void doInBackground(Image... cache) { BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 4; for (Image i : cache) { if (isCancelled()) return null; if (i.thumb != null) continue; SystemClock.sleep(500); i.thumb = loadThumb(i.url); publishProgress(); } return null; } @Override protected void onProgressUpdate(Void... param) { cacheUpdated(); } } private String[] imageURLs = { "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2851.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2944.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_2989.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3005.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3012.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3034.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3047.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3092.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3110.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3113.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3128.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3160.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3226.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3228.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3251.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3268.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3275.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3346.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3365.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3374.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3385.jpg", "http://cdn.cs76.net/2011/spring/lectures/6/imgs/img_3392.jpg", }; }
CacheActivity
public class CacheActivity extends Activity { Button btnStartProgress; ProgressDialog progressBar; private int progressBarStatus = 0; private Handler progressBarHandler = new Handler(); private long fileSize = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cache); GridView gridview = (GridView) findViewById(R.id.grid_view); gridview.setAdapter(new URLImageAdapter(this)); addListenerOnButton(); } public void addListenerOnButton() { btnStartProgress = (Button) findViewById(R.id.btnStartProgress); btnStartProgress.setOnClickListener(new OnClickListener() { public void onClick(View v) { progressBar = new ProgressDialog(v.getContext()); progressBar.setCancelable(true); progressBar.setMessage("File downloading ..."); progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressBar.setProgress(0); progressBar.setMax(100); progressBar.show(); progressBarStatus = 0; fileSize = 0; new Thread(new Runnable() { public void run() { while (progressBarStatus < 100) { progressBarStatus = doInBackground(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } progressBarHandler.post(new Runnable() { public void run() { progressBar.setProgress(progressBarStatus); } }); } if (progressBarStatus >= 100) { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } progressBar.dismiss(); } } }).start(); } }); } public int doInBackground() { while (fileSize <= 1000000) { fileSize++; if (fileSize == 100000) { return 10; } else if (fileSize == 200000) { return 20; } else if (fileSize == 300000) { return 30; }else if (fileSize == 400000) { return 40; }else if (fileSize == 500000) { return 50; }else if (fileSize == 600000) { return 60; }else if (fileSize == 700000) { return 70; }else if (fileSize == 800000) { return 80; }else if (fileSize == 900000) { return 90; } } return 100; } }
解决方案download image in using
public class LoginProgress extends AsyncTask<Object, Object, Object> { private ProgressDialog dialog; @Override protected void onPreExecute() { this.dialog = ProgressDialog.show(applicationContext, "Please wait down", "Loading .....", true); } @Override protected Object doInBackground(Object... params) { // TODO Auto-generated method stub return null; } @Override protected void onPostExecute(Void unused) { //Intent for next activity this.dialog.dismiss(); } }
create object for these class in button click
LoginProgress task = new LoginProgress(); task.execute();
call ur doinbackground method in these doinbackground methode
otherwise do following two
increment time of Thread.sleep(1000); change to Thread.sleep(4000); Thread.sleep(200); change to Thread.sleep(450);
you set gridview.setAdapter(new URLImageAdapter(CacheActivity.this)); in oncreate , remove this adapter in oncreate and write it in end of on click method...
这篇关于没有相应的工作进度的Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!