ошибка «println требуется сообщение» в Android

# #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. Большое спасибо. Благодаря вам, наконец-то я решил эту проблему!!!