Получение нулевой ошибки, хотя ссылка на firebase в порядке - - PullRequest
0 голосов
/ 30 ноября 2018

Я получаю java.lang.NullPointerException: Can't pass null for argument 'pathString' in child(), когда мой код достигает значения valueEventListener, хотя во время отладки мне кажется, что дочернее значение не является нулевым.

Вот изображение кода:

code image

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

database image

Решил проблему, полностью удалив код и начав заново.На этот раз я проверил с помощью Firebase GitHub и сделал это так (в основном то же самое? Я хотел бы знать, что не так с моим первым кодом):

userReference = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
ValueEventListener userListener = new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        //Get user object
        currentUser = dataSnapshot.getValue(User.class);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
        // [START_EXCLUDE]
        Toast.makeText(UserAreaActivity.this, "Failed to load post.",
                Toast.LENGTH_SHORT).show();
    }
};
userReference.addValueEventListener(userListener);

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Просто используйте следующий код:

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 country = dataSnapshot.child("country").getValue(String.class);
        String city = dataSnapshot.child("city").getValue(String.class);
        Log.d(TAG, country + " / " + city);
    }

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

Вывод в logcat будет точно country и city вашего пользователя.

0 голосов
/ 30 ноября 2018

Единственное место в показанном коде, где вы можете получить NPE с этим сообщением, находится в вызове:

...child("users").child(uid);

Так что я бы проверил эту переменную uid, нашёл способ разобратьсяс таким сценарием (uid == null).

0 голосов
/ 30 ноября 2018

Вы используете ненужные для цикла. Вы уже знаете, что такое пользовательский идентификатор. Удалите цикл и повторите попытку.

0 голосов
/ 30 ноября 2018

Используйте getValue(String.class) вместо getValue().toString();

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