Как получить значения из базы данных Firebase Realtime с одинаковыми полями (только значениями этого конкретного поля) в текстовое представление в android? - PullRequest
1 голос
/ 21 июня 2020

Так выглядит моя база данных

Что мне действительно нужно, так это показать каждое значение в поле «Доход» в 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);

}

Ответы [ 2 ]

1 голос
/ 22 июня 2020

Хотя ответ Сайраджа Саванта может сработать, имейте в виду, что нет необходимости прикреплять слушателя на каждой итерации l oop. Более удобное решение - прикрепить слушателя только один раз, как в следующих строках кода:

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 имеет тип String, как оно установлено в ваш 20-06-2020 ребенок. Однако приведенный выше код будет не работать, если значение установлено как Integer, как оно установлено во втором 21-06-2020 потомке. Помните, что оба типа значений должны совпадать. Вы либо установите оба значения как String, и приведенный выше код будет работать, либо вы установите их как числа, в этом случае вам следует использовать эту строку:

totalIncome = totalIncome + ds.child("Income").getValue(Long.class) + " ";
0 голосов
/ 21 июня 2020

Попробуйте получить доступ к дочерним элементам June под Reports и выполните цикл, чтобы получить 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...