我已尽我所能,但仍然无法解决问题。我也收到了最相似的问题,但是所有解决方案都无法正常工作。我正在尝试将图像从可绘制图像获取到图像视图中,但这会导致应用程序崩溃并出现空指针异常 这是我的适配器类
CloudWatch Log
这是获取图像方法
public class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.GroupHolder>{
private Context context;
private List<GroupModel> groupList;
GroupModel model;
public GroupAdapter(Context context, List<GroupModel> groupList) {
this.context = context;
this.groupList = groupList;
}
@NonNull
@Override
public GroupHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new GroupHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.group_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull GroupHolder holder, int position) {
final GroupModel groupModel = groupList.get(position);
holder.setName(groupModel.getName());
holder.setDesc(groupModel.getDescription());
holder.setCourse(groupModel.getCourse());
holder.setOwner(groupModel.getOwner());
holder.setImage(groupModel.getImage());
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, GroupMessage.class);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return groupList.size();
}
public class GroupHolder extends RecyclerView.ViewHolder {
private final TextView name;
private final TextView desc;
private final TextView course;
private final TextView owner;
private final CardView view;
private final ImageView image;
public GroupHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.textView_grp_name );
desc = (TextView) itemView.findViewById(R.id.textView_grp_description);
course = (TextView) itemView.findViewById(R.id.textView_course);
owner = (TextView) itemView.findViewById(R.id.textView_owner);
image = (ImageView) itemView.findViewById(R.id.imageView_groups);
view = (CardView) itemView.findViewById(R.id.group_view);
}
public void setName(String n){
name.setText(n);
}
public void setDesc(String d){
desc.setText(d);
}
public void setCourse(String c){
course.setText(c);
}
public void setOwner(String o){
owner.setText(o);
}
public void setImage(int i){
// StorageReference reference = FirebaseStorage.getInstance().getReference().child(i);
//Glide.with(context).load(reference).into(image);
image.setImageDrawable(context.getResources().getDrawable(model.getImage()));
}
}
}
和错误
public int getImage() {
return image;
}
答案 0 :(得分:1)
在设置可绘制图像之前先进行检查
public void setImage(int i){
// StorageReference reference = FirebaseStorage.getInstance().getReference().child(i);
//Glide.with(context).load(reference).into(image);
Drawable imagedrawable = context.getResources().getDrawable(i); //use i instead of model.getImage(), you are already passing the drawable int
if(imagedrawable !=null)
image.setImageDrawable(imagedrawable);
else
Log.d(TAG, "image is null");
}
答案 1 :(得分:0)
问题是这一行:
public void setImage(int i){
image.setImageDrawable(context.getResources().getDrawable(model.getImage()));
}
显然您的model
变量未设置,我怀疑它也可能是多余的。请改用您已传递的i
变量:
public void setImage(int i){
image.setImageDrawable(context.getResources().getDrawable(i));
}
说明:
在onBindViewHolder
中,您可以这样:
final GroupModel groupModel = groupList.get(position);
未设置model
变量。但是实际上您确实将当前模型的图像资源传递给该方法,因此可以使用该变量。
答案 2 :(得分:0)
我相信Vucko是对的。我不知道AS怎么也不会在您的model.getImage()
方法内向您抛出setImage(int i)
的红色错误消息,因为我看不到任何地方声明的模型变量。 编辑: 我的错误,我看到了它的声明,但从未发现。就是你的问题。
您可以阅读有关资源和getDrawable()here的更多信息。如果他的答案不起作用,则说明您的模型对象未返回正确的可绘制资源类型。有效类型位于开发者网站的Drawable resources页面上。
如果Vucko的解决方案不起作用,请更新您对象的代码。