У меня есть данные, хранящиеся в firebase, у которой есть идентификатор фильма в качестве дочернего элемента, и в нем содержится название фильма. Я хочу отображать имена фильмов, хранящиеся в firebase, в ListView. Проблема, с которой я столкнулся, заключается в том, что я не уверен, как получить только данные названия фильма, а не все данные, включая пользователя. Я также загружаю данные из одного действия и хочу отобразить их в другом действии в ListView.
База данных Firebase
Как он сейчас отображается
Загрузить в Firebase
String filmID = filmDetails.getString("film_id");
String filmName = filmDetails.getString("film_name");
DatabaseReference currentUserDBR = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
if (currentUserID != null) {
currentUserDBR.orderByChild(filmID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String fbFilmID = snapshot.getValue().toString();
if (fbFilmID.contains(filmID)) { // If film already exists Remove it on click
btnSaved.setText("Add to List");
currentUserDBR.child(filmID).removeValue();
Toast.makeText(getApplicationContext(), "Removed from Films List", Toast.LENGTH_SHORT).show();
} else { // If film does not exist add it on click
btnSaved.setText("Remove");
currentUserDBR.child(filmID).child("Film Name").setValue(filmName);
Toast.makeText(getApplicationContext(), "Saved to Films List", Toast.LENGTH_SHORT).show();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
}
Показать в ListView
DatabaseReference filmsReference = FirebaseDatabase.getInstance().getReference( "Users");
lvSavedFilms = findViewById(R.id.lv_display_saved_films);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, R.layout.listitem, R.id.lv_text_color, filmName);
lvSavedFilms.setAdapter(arrayAdapter);
ChildEventListener childEventListener = filmsReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
/* GenericTypeIndicator<HashMap<String, Object>> genericTypeIndicator = new GenericTypeIndicator<HashMap<String, Object>>() {
};
HashMap<String, Object> hmFilmName = snapshot.getValue(genericTypeIndicator);*/
String value = snapshot.getValue().toString();
filmName.add(value);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
arrayAdapter.remove(arrayAdapter.getItem(filmName.indexOf(snapshot.getValue(String.class))));
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
Я пробовал String value = snapshot.getValue(String.class);
, но получил ошибка о том, что не удалось преобразовать HashMap в String.