java - 在 RecyclerView 中从 Firebase 加载图像时出现问题

标签 java android firebase android-recyclerview

我正在尝试制作一个应用程序。我在名为 CardTestActivity 的 Activity 中使用 Horizo​​ntal RecyclerView。我正在 Firebase 数据库中保存两种类型的数据,第一种是名称,第二种是 imageUri。这是我的 Firebase 数据库的屏幕截图:- Screenshot

我遇到了一个问题,比如我在 RecyclerView 中获取名称,但没有获取 imageUri ,而是获取了 null。我有一个 ViewHolder 和一个适配器类,我在 RecyclerView 中使用它。 我尝试更改 DataClass 但遇到同样的问题。我在下面提供了我的代码:-

这是我的代码:-

卡测试适配器:-

public class CardTestAdapter extends RecyclerView.Adapter<CardTestAdapter.CardTestViewHolder> {
    private Context mContext;
    private List<CardTestData> mData;

    public CardTestAdapter(Context context , List<CardTestData> data) {
        mContext = context;
        mData = data;
    }

    @NonNull
    @Override
    public CardTestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.card_test_recycler_view , parent ,false);
        return new CardTestViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull CardTestViewHolder holder, int position) {

        CardTestData testData = mData.get(position);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mContext, "" + testData.getImageUri(), Toast.LENGTH_SHORT).show();
            }
        });

        Glide.with(mContext)
                .asBitmap()
                .load(testData.getImageUri())
                .into(holder.imageView);

        holder.name.setText(testData.getName());
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public class CardTestViewHolder extends RecyclerView.ViewHolder {
        TextView name;
        ImageView imageView;

        public CardTestViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.card_test_name);
            imageView = itemView.findViewById(R.id.card_test_image);
        }
    }
}

卡片测试数据:-

public class CardTestData {
    private String name;
    private String imageUri;

    public CardTestData(){

    }

    public CardTestData(String name , String imageUri) {
        this.name = name;
        this.imageUri = imageUri;
    }

    public String getName() {
        return  name;
    }

    public void setName(String name) {
        this.name =  name;
    }


    public String getImageUri() {
        return imageUri;
    }

    public void setImageUri(String iamgeUri) {
        this.imageUri = getImageUri();
    }
}

我的卡测试 Activity :-

public class CardTestActivity extends AppCompatActivity {

    CardView cv;
    private RecyclerView mRecyclerView;
    private List<CardTestData> mData;
    private ValueEventListener mListener;
    private DatabaseReference mDataRef;
    private CardTestAdapter mAdatper;

    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_card_test);
        cv = findViewById(R.id.new_cardView);

        cv.setCardBackgroundColor(Color.RED);

        mDataRef = FirebaseDatabase.getInstance().getReference("newReleasesData");
        mRecyclerView = this.findViewById(R.id.card_test_recyclerview);
        mRecyclerView.setHasFixedSize(true);
        LinearLayoutManager manager = new LinearLayoutManager(this , LinearLayoutManager.HORIZONTAL ,false);
        mRecyclerView.setLayoutManager(manager);
        mData = new ArrayList<>();
        mAdatper = new CardTestAdapter(this , mData);
        mRecyclerView.setAdapter(mAdatper);

        mListener = mDataRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                    CardTestData data = postSnapshot.getValue(CardTestData.class);
                    mData.add(data);
                }
                mAdatper.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
}

请帮我检索图像,如果您有任何解决方案,请回答我。

最佳答案

您没有在模型中设置从 firebase 获取的图像,而是始终设置默认 null 。检查以下解决方案:

而不是

public void setImageUri(String iamgeUri) { 
    this.imageUri = getImageUri(); 
}

使用

public void setImageUri(String iamgeUri) { 
    this.imageUri = iamgeUri; 
}

关于java - 在 RecyclerView 中从 Firebase 加载图像时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59591604/

相关文章:

android - 深层链接参数不会通过 Mozilla Firefox 和 Opera 传递到 Android 应用程序

java - 如何使用 void display() 在 java 中显示多个输入?

java - 保护用户输入(尚未提交)免于 session 超时的最佳方法是什么?

java - rowspan 的 Thymeleaf 表问题(1 个订单,N 篇文章)

java - NullPointerException - 尝试调用虚拟方法 `notifyDataSetChanged()` - 无法看到创建的列表

javascript - 尝试从 Firebase Firestore 检索文档时,未捕获( promise )类型错误 : snapshot. 数据不是函数

c# - 如何在 Unity android 项目中制作自定义 firebase 事件?

java - JavaFX 中的文本字段验证

java - 亚马逊认知 : identity not found

java - String.xml 包含太多项目,速度太慢