为了账号安全,请及时绑定邮箱和手机立即绑定

图片不显示

package com.fajiuzhishan.thread;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class ImageLoader {
   private ImageView mImageView;
   private String mUrl;
   private Handler mHandler = new Handler() {
       @Override
       public void handleMessage(Message msg) {
           super.handleMessage(msg);
           if (mImageView.getTag().equals(mUrl))
               mImageView.setImageBitmap((Bitmap) msg.obj);
       }
   };

   public void ShowImageByThread(ImageView imageView, final String url) {
       mImageView = imageView;
       mUrl = url;
       new Thread() {
           @Override
           public void run() {
               super.run();
               Bitmap bitmap = getBtimapFromURL(url);
               Message message = Message.obtain();
               message.obj = bitmap;
               mHandler.sendMessage(message);
           }
       }.start();
   }
   public Bitmap getBtimapFromURL(String urlString) {
       Bitmap bitmap;
       InputStream is = null;
       try {
           URL url = new URL(urlString);
           HttpURLConnection connection = (HttpURLConnection) url.openConnection();
           is = new BufferedInputStream(connection.getInputStream());
           bitmap = BitmapFactory.decodeStream(is);
           connection.disconnect();
           return bitmap;
       } catch (MalformedURLException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       } finally {
           try {
               is.close();
           } catch (IOException e) {
               e.printStackTrace();
           }

           return null;
       }
   }
   public void showImageByAsyncTask(ImageView imageView,String url){
        ;new NewsAsyncTask(imageView).execute(url);
   }
       private class NewsAsyncTask extends AsyncTask<String,Void,Bitmap>{

           private ImageView mImageView;
           public NewsAsyncTask(ImageView imageView) {
               this.mImageView = imageView;
           }

           @Override
           protected Bitmap doInBackground(String... strings) {
               return getBtimapFromURL(strings[0]);
           }

           @Override
           protected void onPostExecute(Bitmap bitmap) {
               super.onPostExecute(bitmap);
               mImageView.setImageBitmap(bitmap);
           }

}

在Adapter中 用了

new ImageLoader().showImageByAsyncTask(viewHolder.ig_view,url);

 debug 时  显示Bitmap 为空。

正在回答

2 回答

getBtimapFromURL()方法中去掉connection.disconnect();这句看看,

然后在Adapter中

new ImageLoader().showImageByAsyncTask(viewHolder.ig_view.mList.get(position),url);

适配器辅助类中定义private List<ItemBean> mList;

并加入到构造函数public ItemAdapter(Context context,List<ItemBean> mList) {
   this.mList = mList;
   mInflater=LayoutInflater.from(context);
}


0 回复 有任何疑惑可以回复我~

getBtimapFromURL()方法中去掉connection.disconnect();这句看看

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android必学-异步加载
  • 参与学习       50627    人
  • 解答问题       311    个

了解Android中的异步加载处理方法,这是面试问的最多的知识点

进入课程

图片不显示

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信