Android 在一个类中执行两个不同的异步任务

Android 在一个类中执行两个不同的异步任务,android,android-asynctask,Android,Android Asynctask,我是Android新手。我在使用AsyncTask时遇到问题。 我正在尝试创建一个图片库。在我的图库中有小尺寸的图片,当你点击其中一张时,该图片的大尺寸显示在下面的ImageView中。我使用了两个不同的AsyncTask类。其中一个是从主机获取小尺寸图片,另一个是在您单击“多媒体资料”中的一幅图片时从主机获取大尺寸图片。 我可以加载多媒体资料图像,但当我单击其中一个多媒体资料图像时,我无法在ImageView中显示大尺寸图像 如果您能帮助我或提供任何建议,我将不胜感激…… 我的代码是: pub

我是Android新手。我在使用AsyncTask时遇到问题。

我正在尝试创建一个图片库。在我的图库中有小尺寸的图片,当你点击其中一张时,该图片的大尺寸显示在下面的
ImageView
中。我使用了两个不同的
AsyncTask
类。其中一个是从主机获取小尺寸图片,另一个是在您单击“多媒体资料”中的一幅图片时从主机获取大尺寸图片。

我可以加载多媒体资料图像,但当我单击其中一个多媒体资料图像时,我无法在
ImageView
中显示大尺寸图像
如果您能帮助我或提供任何建议,我将不胜感激……

我的代码是:

public class GalleryView extends Activity{

    String[] smallpicsURL ={        
        "http://egtxxxxx.com/jImages/antartica1.jpg",
        "http://egtxxxxx.com/jImages/antartica2.jpg",
        "http://egtxxxxx.com/jImages/antartica3.jpg",
        "http://egtxxxxx.com/jImages/antartica4.jpg",
        "http://egtxxxxx.com/jImages/antartica5.jpg",
        "http://egtxxxxx.com/jImages/antartica6.jpg",
        "http://egtxxxxx.com/jImages/antartica7.jpg",
        "http://egtxxxxx.com/jImages/antartica8.jpg",
        "http://egtxxxxx.com/jImages/antartica9.jpg",
        "http://egtxxxxx.com/jImages/antartica10.jpg"
        };

    String[] bigpicsURL ={      
            "http://egtxxxxx.com/jImages/b_antartica1.jpg",
            "http://egtxxxxx.com/jImages/b_antartica2.jpg",
            "http://egtxxxxx.com/jImages/b_antartica3.jpg",
            "http://egtxxxxx.com/jImages/b_antartica4.jpg",
            "http://egtxxxxx.com/jImages/b_antartica5.jpg",
            "http://egtxxxxx.com/jImages/b_antartica6.jpg",
            "http://egtxxxxx.com/jImages/b_antartica7.jpg",
            "http://egtxxxxx.com/jImages/b_antartica8.jpg",
            "http://egtxxxxx.com/jImages/b_antartica9.jpg",
            "http://egtxxxxx.com/jImages/b_antartica10.jpg"
            };

    Bitmap pics[];
    Bitmap bigPic;
    ImageView imageView;    

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gallery);        
        Gallery ga = (Gallery)findViewById(R.id.galleryKBU);

        pics=new Bitmap[smallpicsURL.length];

        new FetchSmallBitmap().execute();   

        ga.setAdapter(new ImageAdapter(this));

        try {
            Thread.sleep(700);
         } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }  

        imageView = (ImageView)findViewById(R.id.ivKBU);  

        ga.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                Toast.makeText(getBaseContext(),"Çağdaş Eğitim Yuvası", Toast.LENGTH_SHORT).show();
                new FetchBigBitmap().execute(arg2);
                //imageView.setImageBitmap(bigPic);             
            }       
        });

    } 

    private Bitmap downloadPictures(int i) {
        String urlStr=smallpicsURL[i];          
        try { 
            URL url = new URL(urlStr);
            final URLConnection conn = url.openConnection(); 
            conn.connect(); 
            final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); 
            final Bitmap bm = BitmapFactory.decodeStream(bis); 
            bis.close(); 
            return bm;
        } catch (IOException e) { 
           Log.d("DEBUGTAG",". Resim indirmede hata..."); 
        }     
        return null;
    }

    private Bitmap downloadBigPictures(int i) {
        String urlStr=bigpicsURL[i];            
        try { 
            URL url = new URL(urlStr);
            final URLConnection conn = url.openConnection(); 
            conn.connect(); 
            final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); 
            final Bitmap bm = BitmapFactory.decodeStream(bis); 
            bis.close(); 
            return bm;
        } catch (IOException e) { 
           Log.d("DEBUGTAG",". Resim indirmede hata..."); 
        }     
        return null;
    }
  private class FetchSmallBitmap extends AsyncTask<Void, Integer, Bitmap[]> {

        private ProgressDialog dialog = new ProgressDialog(GalleryView.this);

        protected void onPreExecute(){
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMax(100);
            dialog.setMessage("Resimler yükleniyor");
            dialog.show();
        }

        @Override
        protected Bitmap[] doInBackground (Void ...params) {
            for(int i=0;i<10;i++){
                pics[i]=downloadPictures(i);
                publishProgress(10);                                
            }       
            return pics;
        }
         protected void onProgressUpdate(Integer ...progress){

             dialog.incrementProgressBy(progress[0]);

        }

         protected void onPostExecute(Bitmap[] mbitmap) {
             dialog.dismiss();                
         }
       }

        public class ImageAdapter extends BaseAdapter {

        private Context ctx;
        int imageBackground;

        public ImageAdapter(Context c) {
            ctx = c;
            TypedArray ta = obtainStyledAttributes(R.styleable.gallery_KBU);
            imageBackground = ta.getResourceId(R.styleable.gallery_KBU_android_galleryItemBackground, 1);
            ta.recycle();
        }

        public int getCount() {

            return pics.length;
        }


        public Object getItem(int arg0) {

            return arg0;
        }

        public long getItemId(int arg0) {

            return arg0;
        }

        public View getView(int arg0, View arg1, ViewGroup arg2) {
            ImageView iv = new ImageView(ctx);
            iv.setImageBitmap(pics[arg0]);
            iv.setScaleType(ImageView.ScaleType.FIT_XY);
            iv.setLayoutParams(new Gallery.LayoutParams(150,120));
            iv.setBackgroundResource(imageBackground);
            return iv;
        }

    }
      private class FetchBigBitmap extends AsyncTask<Integer, Integer, Bitmap> {

        private ProgressDialog dialog = new ProgressDialog(GalleryView.this);

        protected void onPreExecute(){
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMax(100);
            dialog.setMessage("Resimler yükleniyor");
            dialog.show();
        }

        @Override
        protected Bitmap doInBackground (Integer ...params) {                   
            imageView.setImageBitmap(downloadBigPictures(params[0]));
            return null;
        }
         protected void onProgressUpdate(Integer ...progress){

             dialog.incrementProgressBy(progress[0]);            

         }

         protected void onPostExecute(Bitmap x) {
             dialog.dismiss();

         }

    }
}
公共类GalleryView扩展活动{
字符串[]smallpicsURL={
"http://egtxxxxx.com/jImages/antartica1.jpg",
"http://egtxxxxx.com/jImages/antartica2.jpg",
"http://egtxxxxx.com/jImages/antartica3.jpg",
"http://egtxxxxx.com/jImages/antartica4.jpg",
"http://egtxxxxx.com/jImages/antartica5.jpg",
"http://egtxxxxx.com/jImages/antartica6.jpg",
"http://egtxxxxx.com/jImages/antartica7.jpg",
"http://egtxxxxx.com/jImages/antartica8.jpg",
"http://egtxxxxx.com/jImages/antartica9.jpg",
"http://egtxxxxx.com/jImages/antartica10.jpg"
};
字符串[]bigpicsURL={
"http://egtxxxxx.com/jImages/b_antartica1.jpg",
"http://egtxxxxx.com/jImages/b_antartica2.jpg",
"http://egtxxxxx.com/jImages/b_antartica3.jpg",
"http://egtxxxxx.com/jImages/b_antartica4.jpg",
"http://egtxxxxx.com/jImages/b_antartica5.jpg",
"http://egtxxxxx.com/jImages/b_antartica6.jpg",
"http://egtxxxxx.com/jImages/b_antartica7.jpg",
"http://egtxxxxx.com/jImages/b_antartica8.jpg",
"http://egtxxxxx.com/jImages/b_antartica9.jpg",
"http://egtxxxxx.com/jImages/b_antartica10.jpg"
};
位图图片[];
位图bigPic;
图像视图图像视图;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
画廊ga=(画廊)findViewById(R.id.galleryKBU);
pics=新位图[smallpicsURL.length];
新建FetchSmallBitmap().execute();
ga.setAdapter(新的ImageAdapter(this));
试一试{
睡眠(700);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}  
imageView=(imageView)findViewById(R.id.ivKBU);
ga.setOnItemClickListener(新的OnItemClickListener(){
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
Toast.makeText(getBaseContext(),“ğağdaşEğitim Yuvası”,Toast.LENGTH_SHORT).show();
新建FetchBigBitmap().execute(arg2);
//设置图像位图(bigPic);
}       
});
} 
私人位图下载图片(int i){
字符串urlStr=smallpicsURL[i];
试试{
URL=新URL(urlStr);
最终URLConnection conn=url.openConnection();
连接();
final BufferedInputStream bis=新的BufferedInputStream(conn.getInputStream());
最终位图bm=BitmapFactory.decodeStream(bis);
二、关闭();
返回bm;
}捕获(IOE){
Log.d(“DEBUGTAG”,“Resim indirmede hata…”);
}     
返回null;
}
私人位图下载BigPictures(int i){
字符串urlStr=bigpicsURL[i];
试试{
URL=新URL(urlStr);
最终URLConnection conn=url.openConnection();
连接();
final BufferedInputStream bis=新的BufferedInputStream(conn.getInputStream());
最终位图bm=BitmapFactory.decodeStream(bis);
二、关闭();
返回bm;
}捕获(IOE){
Log.d(“DEBUGTAG”,“Resim indirmede hata…”);
}     
返回null;
}
私有类FetchSmallBitmap扩展异步任务{
private ProgressDialog=新建ProgressDialog(GalleryView.this);
受保护的void onPreExecute(){
设置ProgressStyle(ProgressDialog.STYLE_水平);
dialog.setMax(100);
setMessage(“Resimler yükleniyor”);
dialog.show();
}
@凌驾
受保护位图[]doInBackground(无效…参数){

对于(inti=0;i您不能在非UI线程上执行以下操作。您正在doinbackground中执行UI操作

    imageView.setImageBitmap(downloadBigPictures(params[0]));
移动到第行上方的OnpostExecute


你不需要一个Asynctask来设置图像

实际上我会在doinbackground部分添加一些代码来创建一个进度条来设置下载的大图片的动画。
我可以在Asynctask中将位图作为返回参数发送吗?你可以将任何对象设置为返回参数。
    imageView.setImageBitmap(downloadBigPictures(params[0]));