Marco
Marco

Reputation: 45

Read data from Firebase Database failed

I have a problem with an android app, I can't set a textView with a String in the Firebase Database. I would to set the text of TextView with a string in my JSON.

mDatabaseReference.child("Profilo").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
           for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){
                UserProfile mProfile = dataSnapshot1.getValue(UserProfile.class);
                nomeProfilo.setText(mProfile.getNome());
            }
        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        }
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        }@Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}

this is my Logcat

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.mysecurity.marco.mysecurty.UserProfile
                                                                                at com.google.android.gms.internal.zzbtg.zze(Unknown Source:89)
                                                                                at com.google.android.gms.internal.zzbtg.zzb(Unknown Source:145)
                                                                                at com.google.android.gms.internal.zzbtg.zza(Unknown Source:0)
                                                                                at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
                                                                                at com.mysecurity.marco.mysecurty.MaterialUserActivity$3.onChildAdded(MaterialUserActivity.java:194)
                                                                                at com.google.android.gms.internal.zzbox.zza(Unknown Source:33)
                                                                                at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source:2)
                                                                                at com.google.android.gms.internal.zzbra$1.run(Unknown Source:63)
                                                                                at android.os.Handler.handleCallback(Handler.java:790)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                at android.os.Looper.loop(Looper.java:164)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6494)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Can you help me?

Upvotes: 1

Views: 438

Answers (2)

ZengoTim
ZengoTim

Reputation: 211

The data in the NoSQL database is is in the JSON form. So from your original code:

for (DataSnapshot child : dataSnapshot.getChildren()) {
    JSONObject json = new JSONObject(child.getValue(String.class));
    nomoProfilo.setText(json.getString("nome");
}

You can build your UserProfile object from the fields of the json.

Upvotes: 1

Peter Haddad
Peter Haddad

Reputation: 80942

Try this:

 mDatabaseReference.child("Profilo").addListenerForSingleValueEvent(new ValueEventListener() {//to retrieve data
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
         for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){
              String names=dataSnapshot1.child("nome").getValue().toString();
              nomeProfilo.setText(names);


                }
           }
         @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

or you can do this also to prevent from iterating using the loop:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
mDatabaseReference.child("Profilo").child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
     @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
      String names=dataSnapshot1.child("nome").getValue().toString();
              nomeProfilo.setText(names);


                }
           }
         @Override
        public void onCancelled(DatabaseError databaseError) {

        }
   });

Upvotes: 1

Related Questions