android - 如何使用 url 将图像下载到自定义 Base adapeter?

标签 android image url download

我使用 url 从后台进程获取图像。为了显示图像,我使用 BaseAdapter 来显示列表中的所有图像。我已将 BaseAdapter 添加到我的 listView 中。

我可以使用 AsyncTask 类在后台下载图像,该类可以返回位图图像。

我已经实现了 MyCustome 适配器类,如下所示。

public class CustomeAdapter extends BaseAdapter {
 private static ArrayList<Message> searchArrayList;

 private LayoutInflater mInflater;

 public CustomeAdapter(Context context, ArrayList<Message> results) {
  searchArrayList = results;
  mInflater = LayoutInflater.from(context);




 }

 public int getCount() {
  return searchArrayList.size();
 }

 public Object getItem(int position) {
  return searchArrayList.get(position);
 }

 public long getItemId(int position) {
  return position;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder holder;
  if (convertView == null) {
   convertView = mInflater.inflate(R.layout.list, null);
   holder = new ViewHolder();
   holder.personName = (TextView) convertView.findViewById(R.id.usrName);
   holder.message = (TextView) convertView.findViewById(R.id.msgText);
   holder.imgPerson = (ImageView) convertView.findViewById(R.id.personImg);
   holder.msgImg = (ImageView) convertView.findViewById(R.id.msgImg);

   convertView.setTag(holder);
  } else {
   holder = (ViewHolder) convertView.getTag();
  }

  holder.personName.setText(searchArrayList.get(position).getShoutUserFirstName());
  holder.message.setText(searchArrayList.get(position).getShoutMessageText());
  holder.msgImg.setImageResource(R.drawable.smile);

  try{

  new DownloadImageTask( holder.imgPerson).execute("http://www.bwappstore.com/WebApps/ShoutImage/Image.ashx?UserID="+searchArrayList.get(position).getShoutUserID());

  }
  catch (RejectedExecutionException  e) {
    e.printStackTrace();
}
  return convertView;
 }

 static class ViewHolder {
  TextView personName;
  TextView message;
 ImageView imgPerson;
 ImageView msgImg;

 }


 private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }
        protected Bitmap doInBackground(String... urls) {
            Bitmap bm = null;
            try {
                URL aURL = new URL(urls[0]);
                URLConnection conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                bm = BitmapFactory.decodeStream(bis);
                bis.close();
                is.close();
           } 
            catch (IOException e) {
               Log.e("", "Error getting bitmap", e);
           }
           return bm;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
}

}

从实现中,我可以下载图像,并且可以在 ListView 中显示,但是当我滚动时图像会发生变化,这些图像都没有固定。这些图像正在一次又一次地加载,并且在图像上过度加载,但不加载相关消息图像 如果加载了一张图像,则它将永远不会再次加载。一段时间后,列表中仅显示一张图像

如何一次性加载一张图像然后显示在列表中? 请任何人帮助我

最佳答案

问题出在你的逻辑上。

您正在适配器的 getView 方法中执行下载图像任务,每次滚动列表时都会调用该方法。

如果您的 Activity 是 ListActivity ,尝试在 onStart 方法中执行您的任务。那么这个问题就不会出现了。

关于android - 如何使用 url 将图像下载到自定义 Base adapeter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9360299/

相关文章:

android - 在 Android Studio 上找不到资源支持 :appcompat-v7:22. 0.0 的错误

python - 正则表达式:验证没有查询参数的 URL 路径

ruby-on-rails-3 - 导轨 : getting the 'new' path for a nested resource

android - 有没有人在(双启动)Chromebook 上成功使用 ADT?

android - Firebase 远程配置总是命中服务器

javascript - 在 iPad 上从 "src"事件更改图像元素的 "touchend"?

node.js - 如何替换图像Node.JS中除黑色以外的所有颜色

html - 使图像适合其父容器

url - Thymeleaf URL 构建

android - flutter 安装 .apk 版本应用程序卡在黑屏上