qq_43544413 2020-11-03 11:18 采纳率: 0%
浏览 122

关于内存泄漏的问题!求大神来解答小弟疑惑?

公司有个需求需要在recycleview适配器中做网络请求。获取图片数据但是在循环网络请求的时候的时候报了这个错误

 A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'response.body().close()' not called

我知道这是内存泄漏,或者没有写close的问题。于是根据报错日志加了response.body().close()但是好像没用还是报这个错误。有大神知道这是什么原因吗?
我的网络请求代码如下请问如何修复才能避免上面这个报错呢?

 Request request = new Request.Builder()
                        .url(AppConst.innerIp + "/api/UserInfo/" + userId + "/GetAvatar")
                        .build();
                Log.e("TAG", "onBindViewHolder: " + "位置" + position + "ID" + request);
                MyApplication.getOkHttpClient().newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {

                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        if (response.code() == 200) {
                            byte[] imge = response.body().bytes();
                            mActivity.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    //显示图片
                                    RequestOptions options = new RequestOptions()
                                            .placeholder(R.drawable.head_pic_background)
                                            .error(R.drawable.load_fail)
                                            .disallowHardwareConfig()
                                            .diskCacheStrategy(DiskCacheStrategy.ALL);
                                    Glide.with(mActivity)
                                            .load(imge)//使用自己加载的方式替代glide下载的方式实现图片显示。
                                            .listener(new RequestListener<Drawable>() {
                                                @Override
                                                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                                    ToastUtils.showLong("加载失败 errorMsg:" + (e != null ? e.getMessage() : "null"));
                                                    return false;
                                                }

                                                @Override
                                                public boolean onResourceReady(final Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                                                    com.mabeijianxi.smallvideorecord2.Log.d("Wain", "成功  Drawable Name:" + resource.getClass().getCanonicalName());
                                                    return false;
                                                }
                                            })
                                            .apply(options)
                                            .into(viewHolder.userPic);
                                }
                            });
  • 写回答

1条回答 默认 最新

  • 程序猫King 2020-11-04 11:34
    关注

    关闭数据流的方式不对,另外我想不通为啥要自己启动网络下载而不直接用Glide

    评论

报告相同问题?

悬赏问题

  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?