android加载大图崩溃,当滚动RecyclerView时,Android Picasso图像加载应用程序崩溃

我正在使用改装访问此Web服务链接:

在recyclerview中加载项目而不加载图像时,应用程序工作正常。但是,如果我添加毕加索代码来加载图像,应用程序在滚动2或3次后就会崩溃。

我得到以下错误:

A/Looper: Could not make wake event fd: Too many open files

或者这些错误加在一起:

E/Parcel: fcntl(F_DUPFD_CLOEXEC) failed in Parcel::read, i is 0, fds[i] is -1, fd_count is 1, error: Too many open files

E/EGL_emulation: tid 11410: swapBuffers(552): error 0x300d (EGL_BAD_SURFACE)

A/Looper: Could not make wake event fd: Too many open files

E/NativeCrypto: AppData::create pipe(2) failed: Too many open files

以下是导致问题的唯一代码:

我首先在适配器构造函数中设置:

Picasso.Builder builder = new Picasso.Builder(context);

builder.downloader(new OkHttp3Downloader(context));

这是RecyclerView的onBind()中的毕加索代码

public void onBindViewHolder(CustomViewHolder holder, int position) {

holder.txtTitle.setText(dataList.get(position).getTitle());

---------------------------------------------------------

builder.indicatorsEnabled(true);

builder.build().load(dataList.get(position).getThumbnailUrl())

.placeholder((R.drawable.ic_launcher_background))

.error(R.drawable.ic_launcher_background)

.into(holder.coverImage);

----------------------------------------------------------

}

以下是改装代码:

RetrofitServiceInterface service = RetrofitClient.getRetrofitInstance().create(RetrofitServiceInterface.class);

Call> call = service.getAllPhotos();

call.enqueue(new Callback>() {

@Override

public void onResponse(Call> call, Response> response) {

progressDoalog.dismiss();

generateDataList(response.body());

}

@Override

public void onFailure(Call> call, Throwable t) {

progressDoalog.dismiss();

Toast.makeText(MainActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();

Log.e("error",t.getMessage());

}

});

}

/*Method to generate List of data using RecyclerView with custom adapter*/

private void generateDataList(List photoList) {

recyclerView = findViewById(R.id.customRecyclerView);

adapter = new CustomAdapter(this,photoList);

RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);

recyclerView.setLayoutManager(layoutManager);

recyclerView.setAdapter(adapter);

}

下面是完整的RecyclerView适配器代码:

public class CustomAdapter extends RecyclerView.Adapter {

private List dataList;

private Context context;

Picasso.Builder builder;

public CustomAdapter(Context context,List dataList){

this.context = context;

this.dataList = dataList;

builder = new Picasso.Builder(context);

builder.downloader(new OkHttp3Downloader(context));

builder.indicatorsEnabled(true);

}

class CustomViewHolder extends RecyclerView.ViewHolder {

public final View mView;

TextView txtTitle;

private ImageView coverImage;

CustomViewHolder(View itemView) {

super(itemView);

mView = itemView;

txtTitle = mView.findViewById(R.id.title);

coverImage = mView.findViewById(R.id.coverImage);

}

}

@Override

public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());

View view = layoutInflater.inflate(R.layout.custom_row, parent, false);

return new CustomViewHolder(view);

}

@Override

public void onBindViewHolder(CustomViewHolder holder, int position) {

holder.txtTitle.setText(dataList.get(position).getTitle());

builder.build().load(dataList.get(position).getThumbnailUrl())

.placeholder((R.drawable.ic_launcher_background))

.error(R.drawable.ic_launcher_background)

.into(holder.coverImage);

}

@Override

public int getItemCount() {

return dataList.size();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值