2016-10-24 3 views
0

Ich versuche, meinem Android Studio-Projekt die Firebase-Datenbank hinzuzufügen. , wenn ich meine app renne (auf Emulator) Ich bin die folgende Fehlermeldung erhalten:"Fehler beim Springen auf den Fehler" beim Hinzufügen der Firebase-Datenbank zur Android-App

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.inbar.amit.ksharet, PID: 2778 
       com.firebase.client.FirebaseException: Failed to bounce to type 
        at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 
        at com.inbar.amit.ksharet.updates$1.onChildAdded(updates.java:52) 
        at com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:48) 
        at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
        at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
       Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token 
       at [Source: [email protected]; line: 1, column: 1] 
        at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:575) 
        at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:46) 
        at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11) 
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 
        at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:181) 
        ... 11 more 

, dass mein Code ist (für Daten aus der Datenbank zu lesen):

public class updates extends AppCompatActivity { 

    private Firebase mRef; 
    private ArrayList<String> messages = new ArrayList<>(); 
    Random rnd = new Random(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_updates); 

     mRef = new Firebase("https://ksharet-d6a24.firebaseio.com/message"); 

     // Get ListView object from xml 
     final ListView listView = (ListView) findViewById(R.id.ListView); 

     // Create a new Adapter 
     final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, 
       android.R.layout.simple_list_item_1, messages); 

     // Assign adapter to ListView 
     listView.setAdapter(adapter); 

     mRef.addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       String message = dataSnapshot.getValue(String.class); 
       Log.v("E_CHILD_ADDED", message); 
       messages.add(0, message); 
       adapter.notifyDataSetChanged(); 
      } 

      @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(FirebaseError firebaseError) { 
      } 
     }); 
    } 
} 

was soll ich tun etwas reparieren?

+0

Was Ihre Datenbank tut aussehen wie? Was befindet sich unter "https://ksharet-d6a24.firebaseio.com/message"? Fehler beim Zurücksetzen ist ein Fehler von der Jackson-Bibliothek, die Firebase für die Objektserialisierung und -deserialisierung verwendet. Weitere Informationen dazu finden Sie hier: http://stackoverflow.com/questions/32108969/why-do-i-get-failed-to-bounce-to-type-when-i-turn-json-from-firebase-into -java rq = 1 – Lyla

+0

@Lyla meine Datenbank eine Echtzeit-Datenbank ist, das ist die json der Datenbank: ‚{ "message": { "-KUTSl1Z-UPLM0lst2OL": { "message":„שלום וברוכים הבאים "Titleאפםם" } } } ' ' 'title ":" ששםם " –

Antwort

0

Ich glaube, wenn Sie verwenden, sollte es funktionieren. Warum? Nun, die Struktur Ihrer Daten ist wie folgt:

{ "message" : // Listener attached here @ https://ksharet-d6a24.firebaseio.com/message 
    { "-KUTSl1Z-UPLM0lst2OL" : // child here 
     { 
      "message" : "שלום וברוכים הבאים לאפליקציה החדשה של בית הספר ״יגאל אלון״", 
      "title" : "שלום" 
     } 
    } 
} 

Wenn Sie dataSnapshot.getValue (String.class) nennen es versucht, dies zu machen:

{ 
     "message" : "שלום וברוכים הבאים לאפליקציה החדשה של בית הספר ״יגאל אלון״", 
     "title" : "שלום" 
    } 

in einen String, was es nicht ist (es ist ein Objekt mit zwei Werten, einer Nachricht und einem Titel). Wenn Sie child method verwenden, können Sie die untergeordnete Nachricht dieses Objekts abrufen, das eine Zeichenfolge ist.

Beachten Sie, dass Sie auch das Objekt haben in ein POJO deserialisieren, wenn Sie eine Klasse wie folgt machen:

public class Message { 

    public String message; 
    public String title; 

    public Message() { 
     // Default constructor required for calls to DataSnapshot.getValue(Message.class) 
    } 

    public User(String message, String title) { 
     this.message = message; 
     this.title = title; 
    } 

} 

und dann Arraylist speichern Nachrichtenobjekte haben und verwenden getValue(Message.class)

Verwandte Themen