# #java #android #firebase #firebase-realtime-database
Вопрос:
Я хочу прочитать идентификатор музыки группы с идентификатором списка воспроизведения 2 в firebase.
Возникает следующая ошибка.
java.lang.NullPointerException: println needs a message
Это моя база данных firebase в реальном времени.
И это мой код.
database = FirebaseDatabase.getInstance(); storage = FirebaseStorage.getInstance(); dref = FirebaseDatabase.getInstance().getReference();
private void Startplaylist(String mood) { DatabaseReference plist = dref.child("Playlist"); plist.orderByChild("Playlist_ID").equalTo(2).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { // Log.i("Value", dataSnapshot.getValue().toString()); String music_id = dataSnapshot.child("Music_ID").getValue(String.class); Log.i("Value_id", music_id); str_musictitle.setText(music_id); } @Override public void onCancelled(@NonNull DatabaseError error) { } }); }
Появится сообщение о том, что в этой части произошла ошибка. Log.i("Value_id", music_id);
Я думаю, что «music_id» не читается.
Я попытался изменить часть String music_id = dataSnapshot.child("Music_ID").getValue(String.class);
String music_ids = dataSnapshot.child("Music_ID").getValue().toString();
и запустить ее, но не смог получить желаемого результата.
Комментарии:
1. music_id равен нулю. Очевидно, вы не можете войти в null. Очевидная вещь, которую я вижу, это Music_ID в бд, и я считаю, что он чувствителен к регистру.
2. Я изменил его на
String music_id = dataSnapshot.child("Music_ID").getValue(String.class);
, но он все еще не работает.
Ответ №1:
При выполнении запроса к базе данных Firebase потенциально может быть несколько результатов. Таким образом, снимок содержит список этих результатов. Даже если есть только один результат, снимок будет содержать список одного результата.
Код в вашем onDataChange
коде должен будет обрабатывать этот список путем перебора dataSnapshot.getChildren()
. Что-то вроде этого:
DatabaseReference plist = dref.child("Playlist"); plist.orderByChild("Playlist_ID").equalTo(2).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { for (DataSnapshot snapshot: dataSnapshot.getChildren()) { // 👈 Loop over results String music_id = snapshot.child("Music_ID").getValue(String.class); // 👈 Get value for this result Log.i("Value_id", music_id); str_musictitle.setText(music_id); } } @Override public void onCancelled(@NonNull DatabaseError error) { throw error.toException(); // 👈 Never ignore possible errors } });
Комментарии:
1. Большое спасибо. Благодаря вам, наконец-то я решил эту проблему!!!