Отображение данных из базы данных в реальном времени на Firebase - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь отобразить данные в своей базе данных, но у меня возникают проблемы при этом. Данные, которые я пытаюсь отобразить, сохраняются как «итоговые» и сохраняются как int. Я попытался сохранить его как строку и дважды, но все же не повезло. В идеале я хотел бы отобразить сумму, а затем отобразить сообщение, если сумма превышает значение 9. Это то, что у меня есть.

public class Results extends AppCompatActivity {
    private DatabaseReference mDatabase;
    private FirebaseAuth fAuth;
    private Button btn;
    private TextView userR;
    private  TextView num;

private FirebaseUser currentUser;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_results);
    userR = (TextView) findViewById(R.id.userResults);

    btn = (Button) findViewById(R.id.generate);
    fAuth = FirebaseAuth.getInstance();
    currentUser = fAuth.getCurrentUser();

    mDatabase = FirebaseDatabase.getInstance().getReference().child("FAQ");
}

@Override
public void onStart() {
    super.onStart();

    ValueEventListener scoreListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            faqinputs FAQInputs = dataSnapshot.getValue(faqinputs.class);
            userR.setText(FAQInputs.getTotal());
        }

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

        }
    };

    mDatabase.addValueEventListener(scoreListener);
}

}

«итого» сохраняется в узле «FAQ», который сохраняется в «User»

Структура данных следующая: Это скриншот, некоторые данные хранятся в установленных узлах

Ниже приведены данные, которые я использовал для создания узла FAQ.

  private void sendScoreData() {
        String currentUserID = fAuth.getUid();
        faqinputs FAQInputs = new faqinputs(questionOne, questionTwo, questionThree, questionFour, questionFive, questionSix, questionSeven, questionEight, questionNine, questionTen, total);
        mDatabase.child("Users").child(currentUserID).push().child("FAQ").setValue(FAQInputs);


    }

            }

1 Ответ

1 голос
/ 10 апреля 2020

Чтобы получить значение свойства total, вы должны добавить все имена узлов в вашей ссылке, как в следующих строках кода:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference totalRef = rootRef.child("Users").child(uid).child("-M4YRj8nbobkuKurbHqC").child("FAQ").child("total");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        int total = dataSnapshot.getValue(Integer.class);
        Log.d("TAG", "total: " + total);
    }

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

Результат в logcat будет:

total: 15

Я вижу сумму как число, однако, если вы сохраните ее как строку, используйте эту строку:

String total = dataSnapshot.getValue(String.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...