首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从firebase检索数据时在android中获取空值

从firebase检索数据时在android中获取空值
EN

Stack Overflow用户
提问于 2021-02-03 13:42:52
回答 1查看 149关注 0票数 0

我想从所有产品的子日期开始获取成本和产品名称的价值。对于上述代码,我将获得空值。

如何从不同的孩子那里获得价值?

我的Java类:

代码语言:javascript
复制
public class CompleteExpenses {

   String product;
   String date;
   Long cost;
   Long quantity;

    public CompleteExpenses() {

    }

    public String getProduct() {
        return product;
    }

    public void setProduct(String product) {
        this.product = product;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public Long getCost() {
        return cost;
    }

    public void setCost(Long cost) {
        this.cost = cost;
    }

    public Long getQuantity() {
        return quantity;
    }

    public void setQuantity(Long quantity) {
        this.quantity = quantity;
    }
}

我的适配器:

代码语言:javascript
复制
public class Product_Adapter extends RecyclerView.Adapter {

    List<CompleteExpenses> completeExpensesList;

    public Product_Adapter(List<CompleteExpenses> completeExpensesList) {
        this.completeExpensesList = completeExpensesList;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_layout,parent,false);
        ViewHolderClass viewHolderClass=new ViewHolderClass(view);
        return viewHolderClass;

    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        ViewHolderClass viewHolderClass = (ViewHolderClass) holder;

        CompleteExpenses completeExpenses = completeExpensesList.get(position);

        String strName = String.valueOf(completeExpenses.getProduct());
        viewHolderClass.pr.setText(strName);

        String strCost = String.valueOf(completeExpenses.getCost());
        viewHolderClass.cs.setText(strCost);
    }
    @Override
    public int getItemCount() {
        return completeExpensesList.size();
    }

    public class ViewHolderClass extends RecyclerView.ViewHolder{

        TextView pr,cs;

        public ViewHolderClass(@NonNull View itemView) {
            super(itemView);
        pr = (TextView) itemView.findViewById(R.id.tv_productname);
            cs = (TextView) itemView.findViewById(R.id.tv_costsum);

        }
    }
}

Java活动:

代码语言:javascript
复制
public class complete_expenses extends AppCompatActivity {

    List<CompleteExpenses> completeExpenses;
    RecyclerView recyclerView;
    Product_Adapter product_adapter;
    DatabaseReference databaseReference,databaseReference1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_complete_expenses);
        recyclerView=findViewById(R.id.rv_products);
        recyclerView.setHasFixedSize(true);
        LinearLayoutManager llm = new LinearLayoutManager(this);
        llm.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(llm);


        databaseReference= FirebaseDatabase.getInstance().getReference().child("Project 1").child("CompleteExpenses");

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                completeExpenses = new ArrayList<CompleteExpenses>();
                CompleteExpenses e = snapshot.getValue(CompleteExpenses.class);
                completeExpenses.add(e);
                product_adapter=new Product_Adapter(completeExpenses);
                recyclerView.setAdapter(product_adapter);



            }

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

            }
        });



    }
}

火力基础结构:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-03 14:42:12

您正在读取Project 1/CompleteExpenses中的所有数据,然后尝试从其中读取具有属性costdateproductquantity的单个对象。

但是,如果我们查看您的JSON,Project 1/CompleteExpenses没有这些属性。相反,这些属性存在于JSON中较低的两个级别的子节点(可能还有其他子节点)上。

因此,要么需要读取JSON中较低级别的数据

代码语言:javascript
复制
databaseReference= FirebaseDatabase.getInstance().getReference()
                            .child("Project 1/CompleteExpenses/M-Sand/11-2-2021");

databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        completeExpenses = new ArrayList<CompleteExpenses>();
        CompleteExpenses e = snapshot.getValue(CompleteExpenses.class);

或者,您需要在onDataChange中读取的数据上导航

代码语言:javascript
复制
databaseReference= FirebaseDatabase.getInstance().getReference().child("Project 1").child("CompleteExpenses");

databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        completeExpenses = new ArrayList<CompleteExpenses>();
        for (DataSnapshot nameSnapshot: snapshot.getChildren()) {
            for (DataSnapshot dateSnapshot: nameSnapshot.getChildren()) {
                CompleteExpenses e = dateSnapshot.getValue(CompleteExpenses.class);
                completeExpenses.add(e);
            }
        }
        product_adapter=new Product_Adapter(completeExpenses);
        recyclerView.setAdapter(product_adapter);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66028760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档