You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase数据无法在Android应用中显示,寻求技术支持

修复Firebase数据在Android Cart页面不显示的问题

我看了你提供的代码,发现几个关键问题导致Firebase数据无法在Cart页面正常显示,咱们一步步来排查修复:


1. 修正Firebase数据结构不匹配问题

你现在在sunglass1.java里是直接把商品名称作为键、价格作为单一值存储的:

myRef.setValue("$64");

但你的cartitems实体类需要title和price两个字段的对象结构,所以得调整数据存储方式,让Firebase里的数据能和你的实体类对应上:

// 替换原来的myRef.setValue("$64");
HashMap<String, Object> product = new HashMap<>();
product.put("title", "Octagon Glasses");
product.put("price", "$64");
// 用push()生成唯一ID,避免重复添加时覆盖原有数据
database.getReference("cartItems").push().setValue(product);

调整后Firebase的数据结构会变成:

cartItems
  - 随机生成的唯一ID1
    - title: "Octagon Glasses"
    - price: "$64"
  - 随机生成的唯一ID2
    - ...

2. 修复cartitems.java的setPrice方法bug

你的setPrice方法参数名和赋值逻辑错误,会导致价格无法正确设置:

// 原来的错误代码
public void setPrice(String year) {
    this.price = price;
}
// 修改为
public void setPrice(String price) {
    this.price = price;
}

3. 完善cart_list_row.xml布局

你当前的布局里没有为title和price定义带id的TextView,适配器找不到对应的控件,所以无法渲染数据:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focusable="true"
    android:paddingBottom="@dimen/row_padding_vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/row_padding_vertical">

    <!-- 商品标题 -->
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <!-- 商品价格 -->
    <TextView
        android:id="@+id/price"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:textSize="16sp"
        android:textColor="@android:color/darker_gray"/>
</RelativeLayout>

4. 补全cart.java的核心逻辑(你没提供这个文件,这是关键!)

你需要在CartActivity里初始化RecyclerView,监听Firebase数据库的变化,把数据加载到列表中:

package edu.phoenix.mbl402.week2apptt2163;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;

public class cart extends AppCompatActivity {
    private RecyclerView recyclerView;
    private cartadapter adapter;
    private List<cartitems> cartItemsList;
    private DatabaseReference dbRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cart);

        // 初始化列表和RecyclerView
        cartItemsList = new ArrayList<>();
        recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new cartadapter(cartItemsList);
        recyclerView.setAdapter(adapter);

        // 获取Firebase数据库引用
        dbRef = FirebaseDatabase.getInstance().getReference("cartItems");

        // 监听数据变化,实时更新列表
        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                cartItemsList.clear(); // 清空旧数据,避免重复加载
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    // 把Firebase数据转换成cartitems对象
                    cartitems item = snapshot.getValue(cartitems.class);
                    cartItemsList.add(item);
                }
                adapter.notifyDataSetChanged(); // 通知适配器刷新数据
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // 处理数据加载错误
                Toast.makeText(cart.this, "加载数据失败: " + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

5. 检查Firebase数据库规则

因为你的应用没有用户认证,需要确保数据库允许所有用户读取数据。打开Firebase控制台的Realtime Database -> 规则,修改为测试用规则(正式上线前请根据需求调整权限,避免数据被恶意修改):

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

做完这些修改后,重新运行应用,添加商品到Firebase,再打开Cart页面应该就能看到数据了。如果还有问题,可以查看Logcat里的错误信息,排查是否存在Firebase权限或者数据解析的问题。

内容的提问来源于stack exchange,提问作者Tanner Tattini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:37:54