簡體   English   中英

從 firebase 檢索數據時,在 android App 中獲取 null 值

[英]Getting null value in android App when data is retrieve from firebase

我想從所有產品的子日期中獲取成本和產品名稱的值。 我得到上述代碼的 null 值。

如何從不同的 Childs 中獲取價值?

我的 Java Class:

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;
    }
}

我的適配器:

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活動:

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) {

            }
        });



    }
}

Firebase結構:

https://i.stack.imgur.com/tcBWB.png

您正在從Project 1/CompleteExpenses讀取所有數據,然后嘗試從那里讀取具有屬性costdateproductquantity的單個 object 。

但是,如果我們查看您的 JSON,則Project 1/CompleteExpenses沒有這些屬性。 相反,這些屬性存在於 JSON 中低兩個級別的子節點(可能還有其他子節點)上。

因此,您要么需要從 JSON 的較低級別讀取數據

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中讀取的數據

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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM