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