java - Glide 无法从 Room DB 加载图片。大小为 [0x0] 的 null 加载失败
问题描述
我正在尝试使用 Glide 在 RecyclerView 中加载图像。用户需要在 parentClass 中选择图片,然后图片将保存在 RoomDB 并加载到 RecyclerView,但 Glide 说
2021-09-23 18:23:30.321 10414-10414/com.example.rempractice W/Glide: Load failed for null with size [0x0]
class com.bumptech.glide.load.engine.GlideException: Received null model
父类监听器
ARB.contRem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ARB.remText.getText().toString().equals("")){
ARB.err.setText("errCode");
}
else if(ARB.dateFromCalendar.getText().toString().equals("")){
ARB.err.setText("errCode");
}
else {
Bitmap bitmap = ((BitmapDrawable)ARB.addImageRem.getDrawable()).getBitmap();
Uri uri = getImageUri(getContext(), bitmap);
list.add(uri.toString());
ARVM.addReminder(ARB.remText.getText().toString(),
ARB.dateFromCalendar.getText().toString(),
false,
list);
Navigation.findNavController(v).popBackStack();
}
}
});
适配器类
@Override
public void onBindViewHolder(@NonNull reminderViewHolder holder, int position) {
GlideApp.with(hostFragment).load(rems.get(position).getImages()).apply(new RequestOptions()
.placeholder(R.drawable.ic_launcher_background)
.fitCenter()).into(holder.binding.imageView);
holder.binding.textrow.setText(rems.get(position).getTextRem());
holder.binding.daterow.setText(rems.get(position).getDateRem());
holder.binding.isdone.setChecked(rems.get(position).isDone());
}
DTO 类
@Override
public List<String> getImages() {
if (super.getImages() == null || super.getImages().isEmpty()) {
super.setImages(new Gson().fromJson(this.images, List.class));
}
return super.getImages();
}
public void setImages(String images) {
super.setImages(Collections.singletonList(images));
this.images = new Gson().toJson(images);
}
滑翔实现
implementation ("com.github.bumptech.glide:glide:4.12.0") {
exclude group: "com.android.support"
}
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation ("com.github.bumptech.glide:glide:4.12.0@aar") {
transitive = true
}
解决方案
该问题已通过 DTO 类中的覆盖方法解决。
前
public void setImages(String images) {
super.setImages(Collections.singletonList(images));
this.images = new Gson().toJson(images);
}
后
@Override
public void setImages(List<String> images) {
super.setImages(images);
this.images = new Gson().toJson(images);
}