NoPoint 刚开始 android 开发就遇到一个问题, 获取的网路图片只显示黑色??

u1351384616 · 2015年09月14日 · 最后由 DouO 回复于 2015年09月15日 · 1514 次阅读

最终的结果如下图, 不知道有没有到遇到同样问题的人? android sdk 5.1

源代码如下:

public class BitmapHelper {

    public static void getBitmapFromUrl(String imgUrl, final Callback callback) throws IOException {
        imgUrl = "http://pic1.ooopic.com/uploadfilepic/sheying/2008-09-15/OOOPIC_vipvip_2008091515352237f8970090647c8914.jpg";
        SyncHttpClient httpClient = new SyncHttpClient();
        httpClient.get(imgUrl, new BinaryHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] binaryData) {
                BitmapFactory.Options opts = new BitmapFactory.Options();
                opts.inPreferredConfig = Bitmap.Config.ALPHA_8;
                opts.inJustDecodeBounds = false;
                opts.inSampleSize = 10;
                Bitmap bitmap = BitmapFactory.decodeByteArray(binaryData, 0, binaryData.length, opts);
                callback.response(bitmap);
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] binaryData, Throwable error) {
                Log.w("request.image: ", statusCode + ", error: " + error);
            }
        });

    }

    public static interface Callback {
        public void response(Bitmap bitmap);
    }

}

public class DestinationAdapter extends RecyclerView.Adapter<DestinationAdapter.ViewHolder> {

    List<Destination> data = new ArrayList<>();

    public DestinationAdapter(List<Destination> data) {
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.destination_row, viewGroup, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
        viewHolder.cnName.setText(data.get(i).cnName);
        viewHolder.enName.setText(data.get(i).enName);
        final ImageView img = viewHolder.img;
        try {
            Log.w(":::", data.get(i).urls[0]);
            BitmapHelper.getBitmapFromUrl(data.get(i).urls[0], new BitmapHelper.Callback() {
                @Override
                public void response(Bitmap bitmap) {
                    img.setImageBitmap(bitmap);
                    img.invalidate();
                }
            });

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        TextView enName;
        TextView cnName;
        ImageView img;

        public ViewHolder(View itemView) {
            super(itemView);
            enName = (TextView) itemView.findViewById(R.id.destinationEnName);
            cnName = (TextView) itemView.findViewById(R.id.destinationCnName);
            img = (ImageView) itemView.findViewById(R.id.destinationImage);
        }
    }
}

}
此贴已暂时被屏蔽!

以下几种情况的帖子可能会被屏蔽:

  1. 标题/正文描述不清不楚;
  2. 无意义的发帖;
  3. 存在广告嫌疑;
  4. 招聘信息描述不清楚,未按照招聘节点的要求发帖,或职位信息不符合社区用户群需求;
  5. 新注册的帐号发布产品推广贴是不允许的哦,付出和回报是相等的,当然如果你的产品确实非常有意思,或是和 Ruby 有关的东西,是不会进入这个栏目的。
  6. 太过弱的提问会被直接转移到此节点,请在提问前多尝试,多搜索;
  7. 理论上,不允许发布 QQ 群、微信群之类讨论群。

如果你发现你的帖子被屏蔽,请自我检查反省,并修改帖子内容。


招聘贴被屏蔽原因

警告: 以后招聘贴不符合要求,直接屏蔽,管理员不再回复,如认真阅读,继续新发同样格式的贴,将会被禁用账号!

  • 排版请按 Ruby China 的 Markdown 格式要求,具体请认真阅读: 排版指导,并参考 这篇招聘 的排版;
  • 招聘内容过少,缺少公司介绍,产品介绍,职位介绍,或待遇,工作地,联系方式等必要信息;
  • 重复发帖(一家公司每月限制只能发一次招聘);
  • 专业不对口(个别不对口,但有特点的,我们会放过);

如果你有时间,请阅读 招聘栏目详细说明


学会如何合理提问,请阅读:https://ruby-china.org/topics/24325

当你修改好以后,可以回帖 @huacnlee@Rei@lgn21st 任何一人,我们将会审核,通过以后才可恢复到其他节点。

注!多次发现广告嫌疑的帐号,将会被禁用帐号。

共收到 1 条回复

虽然有预感这个帖子存在不了多久,还是说两句吧。

你的代码有不少冗余,BitmapFactory.Options 你赋的是默认值,inSampleSize应该设置 2 的幂。img.invalidate(); 也是多余的。接口声明 static 也是多余的。

当然这些与你遇到的 bug 无直接关系—_—

我怀疑是 AsyncHttpClient 的问题,试试看不要用它,给你参考下:

protected Bitmap loadBitmap(Context context) throws LruImageException {
      Bitmap bitmap = null;
      try {
          URLConnection conn = new URL(url).openConnection();
          conn.setConnectTimeout(CONNECT_TIMEOUT);
          conn.setReadTimeout(READ_TIMEOUT);
          bitmap = BitmapFactory.decodeStream((InputStream) conn.getContent());
      } catch (IOException e) {
          e.printStackTrace();
          throw new LruImageException(e);
      }
      return bitmap;
  }

自己慢慢调错嘛。

另外推荐你用第三方库加载图片,比如

最近慢慢写的个人用的加载图片的库douo/lru-image ,你也可以参考下。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册