首页 > 解决方案 > 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
    }

我期待的照片 我期待的照片

我得到的照片 我得到的照片

标签: javaandroidandroid-roomandroid-glide

解决方案


该问题已通过 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);
    }

推荐阅读