2016-11-02 4 views
0

Я новичок в firebase и пытаюсь реализовать базу данных в реальном времени на андроид. Я могу написать в БД успешно, но когда я пытаюсь читать из БД, я получаю com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.softworld.crib.models.Usercom.google.firebase.database.DatabaseException: невозможно преобразовать объект типа java.lang.String для ввода com.softworld.crib.models.User

Here is my DB on firebase

Это, как я пост и читать из БД

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; 
    } 
} 

ответ

2

Я думаю, что вы должны изменить

dbRef.child(userId).addValueEventListener(new ValueEventListener() { 

в

dbRef.addValueEventListener(new ValueEventListener() { 

, как объяснено в https://www.firebase.com/docs/android/guide/retrieving-data.html

В качестве альтернативы, если вы действительно хотите получить только событие для этого конкретного userId, то DataSnapshot ваш получать, вероятно, уже пользователь вы ищете , поэтому использование .getChildren() в

for (DataSnapshot noteDataSnapshot : dataSnapshot.getChildren()) { 

, вероятно, нет необходимости.

+0

Я изменил это, и ошибка преобразования исчезла. однако теперь я получаю java.lang.InstantiationException: невозможно создать экземпляр абстрактного класса android.net.Uri –

+0

Если это не место, это еще одна проблема. Может быть, вам следует задокументировать отладку приложения (поэтапно, журналы, чтение стеков) .... –

+0

correct @ Orabîg Я нашел проблему в другом месте. Но ваше решение об изменении на dbRef.addValueEventListener (новый ValueEventListener() {решил мою проблему. –

Смежные вопросы

 Смежные вопросы