Читать конкретные данные из базы данных Firebase - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь загрузить конкретного ребенка от текущего пользователя, но он отображает информацию от всех пользователей.

image of Firebase database screenshot of emulator

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.activity_user_profile, container, false);

        btEdit = v.findViewById(R.id.button_edit);
        mChildValueTextView = v.findViewById(R.id.childValueTextView);
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference mRef = database.getReference("Users");

        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String childValue = String.valueOf(dataSnapshot.getValue());
                mChildValueTextView.setText(childValue);
            }

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

1 Ответ

0 голосов
/ 07 ноября 2019

Используя следующую строку кода:

String childValue = String.valueOf(dataSnapshot.getValue());

Это означает, что вы получаете всех пользователей в вашем Users узле. Если вы хотите получить одного пользователя, аутентифицированного пользователя, вы должны пойти на уровень глубже в дереве. Я предполагаю, что fp60 ... Xez1 - это идентификатор пользователя, который приходит из процесса аутентификации, чтобы получить его данные, используйте следующие строки кода:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String age = dataSnapshot.child("age").getValue(String.class);
        String name = dataSnapshot.child("name").getValue(String.class);
        String sex = dataSnapshot.child("sex").getValue(String.class);
        Log.d("TAG", name + ", " + sex + ", " + age);
    }

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

Предполагая, что аутентифицированный пользователь имеет в качестве uidВ приведенном выше примере fp60 ... Xez1 результат в вашем logcat будет:

carlostest2, m, 28
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...