簡體   English   中英

如何從具有相同字段(僅該特定字段的值)的 Firebase 實時數據庫中檢索值到 android 的文本視圖中?

[英]How to retrieve values from a Firebase Realtime Database with same fields(only values of that particular field) into a text view in android?

這就是我的數據庫的樣子

我真正需要的是在TextView的“收入”字段中顯示每個值。

250 105

這可能嗎? 如果可能,請幫助我。

這就是我將值插入數據庫的方式

private void addReport() {

    Float total_Income = Float.valueOf(tv_total_income.getText().toString());
    String current_date = tv_current_date.getText().toString();
    
    SimpleDateFormat sdf = new SimpleDateFormat("MMMM");
    String currentDateandTime = sdf.format(new Date());
    


    FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
    DatabaseReference mDbRef = mDatabase.getReference("Reports"+"/"+currentDateandTime+"/"+current_date).child("Date");
    mDbRef.setValue(current_date);
    DatabaseReference mDbRef1 = mDatabase.getReference("Reports"+"/"+currentDateandTime+"/"+current_date).child("Income");
    mDbRef1.setValue(total_Income);

}

雖然 Sairaj Sawant 的答案可能有效,但請記住,無需在循環的每次迭代中附加偵聽器。 更方便的解決方案是只附加一次偵聽器,如以下代碼行所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference juneRef = rootRef.child("Reports").child("June");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String totalIncome = "";
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            totalIncome = totalIncome + ds.child("Income").getValue(String.class) + " ";
            
        }
        Log.d("TAG", totalIncome);
        textView.setText(totalIncome);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
juneRef.addListenerForSingleValueEvent(valueEventListener);

此代碼僅在Income屬性為字符串類型時才有效,因為它是在您的20-06-2020孩子中設置的。 但是,如果將值設置為Integer ,則上述代碼將不起作用,因為它在您的第二個21-06-2020孩子中設置。 請記住,兩種類型的值都必須匹配。 您可以將兩者都設置為 String 並且上面的代碼將起作用,或者您將它們設置為數字,在這種情況下您應該使用此行:

totalIncome = totalIncome + ds.child("Income").getValue(Long.class) + " ";

嘗試在Reports下訪問June的孩子並循環獲取income ,如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();    
DatabaseReference reportsRef = rootRef.child("Reports").child("June");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = ds.getKey();
            DatabaseReference keyRef = rootRef.child(key).child("income");
            ValueEventListener valueEventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds1 : dataSnapshot.getChildren()) {
                        String income = ds1.getValue(String.class);
                        Log.d("TAG", income);
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {}
            };
            keyRef.addListenerForSingleValueEvent(valueEventListener);
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
reportsRef.addListenerForSingleValueEvent(eventListener);

暫無
暫無

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

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