Я новичок в firebase и пытаюсь реализовать базу данных в реальном времени на андроид. Я могу написать в БД успешно, но когда я пытаюсь читать из БД, я получаю com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.softworld.crib.models.User
com.google.firebase.database.DatabaseException: невозможно преобразовать объект типа java.lang.String для ввода com.softworld.crib.models.User
Это, как я пост и читать из БД
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("myUsers");
String userId = dbRef.push().getKey();
User user = new User("My New Name","[email protected]",loggedInUser.getPersonPhoto());
//how I post to db
dbRef.child(userId).setValue(user);
//how I read from db
dbRef.child(userId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
List users = new ArrayList<>();
for (DataSnapshot noteDataSnapshot : dataSnapshot.getChildren()) {
User user = noteDataSnapshot.getValue(User.class);
Toast.makeText(MainActivity.this, user.getPersonEmail(), Toast.LENGTH_LONG).show();
users.add(user);
}
//Log.d(TAG, "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
//Log.w(TAG, "Failed to read value.", error.toException());
}
});
И мой класс User выглядит следующим образом
public class User {
String personName,personEmail;
Uri personPhoto;
public User() {
}
public User(String personName, String personEmail, Uri personPhoto) {
this.personName = personName;
this.personEmail = personEmail;
this.personPhoto = personPhoto;
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
public String getPersonEmail() {
return personEmail;
}
public void setPersonEmail(String personEmail) {
this.personEmail = personEmail;
}
public Uri getPersonPhoto() {
return personPhoto;
}
public void setPersonPhoto(Uri personPhoto) {
this.personPhoto = personPhoto;
}
}
Я изменил это, и ошибка преобразования исчезла. однако теперь я получаю java.lang.InstantiationException: невозможно создать экземпляр абстрактного класса android.net.Uri –
Если это не место, это еще одна проблема. Может быть, вам следует задокументировать отладку приложения (поэтапно, журналы, чтение стеков) .... –
correct @ Orabîg Я нашел проблему в другом месте. Но ваше решение об изменении на dbRef.addValueEventListener (новый ValueEventListener() {решил мою проблему. –