2016-07-27 7 views
2

Ich habe versucht, über Firebase zu lernen, und in meinem ersten Beispiel gibt es einen Fehler, den ich einfach nicht verstehe. Wenn jemand mir helfen kann, würde ich so dankbar seinFirebase Unbekannte Eigenschaft Ausnahme

THIS MY MAINACTIVITY.JAVA IST

package com.example.betterlaylow.firebasetestinsertretrieve; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

import com.firebase.client.DataSnapshot; 
import com.firebase.client.Firebase; 
import com.firebase.client.FirebaseError; 
import com.firebase.client.ValueEventListener; 

import java.util.HashMap; 
import java.util.Map; 

public class MainActivity extends AppCompatActivity { 

private EditText editTextName; 
private EditText editTextAddress; 
private TextView textViewPersons; 
private Button buttonSave; 

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

    Firebase.setAndroidContext(this); 

    buttonSave = (Button) findViewById(R.id.buttonSave); 
    editTextName = (EditText) findViewById(R.id.editTextName); 
    editTextAddress = (EditText) findViewById(R.id.editTextAddress); 

    textViewPersons = (TextView) findViewById(R.id.textViewPersons); 

    //Click Listener for button 
    buttonSave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Creating firebase object 
      Firebase ref = new Firebase(Config.FIREBASE_URL); 

      //Getting values to store 
      String name = editTextName.getText().toString().trim(); 
      String address = editTextAddress.getText().toString().trim(); 

      //Creating Person object 
      Person person = new Person(); 

      //Adding values 
      person.setName(name); 
      person.setAddress(address); 

      //Storing values to firebase 
      ref.child("Person").setValue(person); 


      //Value event listener for realtime data update 
      ref.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
        for (DataSnapshot postSnapshot : snapshot.getChildren()) { 
         //Getting the data from snapshot 
         Person person = postSnapshot.getValue(Person.class); 

         //Adding it to a string 
         String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n"; 

         //Displaying it on textview 
         textViewPersons.setText(string); 
        } 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 
        System.out.println("The read failed: " + firebaseError.getMessage()); 
       } 
      }); 

     } 
    }); 
} 

} 

THIS IS MY PERSON.JAVA

package com.example.betterlaylow.firebasetestinsertretrieve; 

/** 
* Created by betterlaylow on 7/26/16. 
*/ 

public class Person { 
//name and address string 
private String name; 
private String address; 

public Person() { 
    /*Blank default constructor essential for Firebase*/ 
} 
//Getters and setters 
public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 
} 

THIS MY CONFIG.JAVA IST

package com.example.betterlaylow.firebasetestinsertretrieve; 

/** 
* Created by betterlaylow on 7/26/16. 
*/ 
public class Config { 
public static final String FIREBASE_URL = "https://simplifiedcoding.firebaseio.com/"; 


} 

UND DIESE ID DER ANDROID MONITOR

07-26 21: 07: 06.917 6.408 bis 6.408/com.example.betterlaylow.firebasetestinsertretrieve E/Android Runtime: fatal EXCEPTION: main Prozess: com.example.betterlaylow.firebasetestinsertretrieve, PID: 6408 com.firebase.client. FirebaseException: Fehler abprallen bei com.firebase.client.DataSnapshot.getValue (DataSnapshot.java:185) bei com.example.betterlaylow.firebasetestinsertretrieve.MainActivity $ 1 $ 1.onDataChange (MainActivity.java:66) bei com eingeben .firebase.client.core.ValueEventRegistration.fireEvent (ValueEventRegistration.java:45) bei com.firebase.client.core.view.DataEvent.fire (DataEvent.java:45) bei com.firebase.client.core.view.EventRaiser $ 1.run (EventRaiser.java:38) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler .java: 95) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 616) verursacht durch: com. schnellerexml.jac kson.databind.exc.UnrecognizedPropertyException: Unbekanntes Feld "msg" (Klasse com.example.betterlaylow.firebasettestinserretrieve.Person), nicht als ignorierbar gekennzeichnet (2 bekannte Eigenschaften:, "Adresse", "Name"]) um [Quelle: [email protected]; Zeile: 1, Spalte: 9] (über die Referenzkette: com.example.betterlaylow.firebasettestinsertretrieve.Person ["msg"]) unter com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty (DeserializationContext.java:555) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty (StdDeserializer.java:708) bei com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty (BeanDeserializerBase.java:1160) bei com.fasterxml. jackson.databind.deser.BeanDeserializer.deserializeFromObject (BeanDeserializer.java:315) bei com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize (BeanDeserializer.java:121) bei com.f asterxml.jackson.databind.ObjectMapper._readMapAndClose (ObjectMapper.java:2888) bei com.fasterxml.jackson.databind.ObjectMapper.readValue (ObjectMapper.java:2034) bei com.firebase.client.DataSnapshot.getValue (DataSnapshot. java: 183) bei com.example.betterlaylow.firebasettestintretrieve.MainActivity $ 1 $ 1.onDataChange (MainActivity.java:66) bei com.firebase.client.core.ValueEventRegistration.fireEvent (ValueEventRegistration.java:45) bei com.firebase.client.core.view.DataEvent.fire (DataEvent. java: 45) bei com.firebase.client.core.view.EventRaiser $ 1.run (EventRaiser.java:38) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler .dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method .im voke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Antwort

0

Sie haben Ihren Listener so programmiert, dass unter der Position "Person" mehrere Instanzen von Person vorliegen. Dazu müssen Sie einen eindeutigen Schlüssel für jede Person erstellen müssen erstellt mit der push() Methode von DatabaseReference:

 //Storing values to firebase 
     ref.child("Person").push().setValue(person); 

Alternativ, wenn Sie nur einen wollen Person an der Stelle „Person“ ändern Sie den Hörer wie folgt aus:

  public void onDataChange(DataSnapshot snapshot) { 
        Person person = snapshot.getValue(Person.class); 

        //Adding it to a string 
        String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n"; 

        //Displaying it on textview 
        textViewPersons.setText(string); 

      } 

Auch das Firebase SDK, das Sie verwenden, ist nicht das aktuelle. Wenn Sie gerade mit Firebase beginnen, warum nicht the latest verwenden?

0

Sie vermissen @IgnoreExtraProperties aus Ihrer Klasse. Schreiben Sie Ihre POJO-Klasse in etwa wie folgt:

@IgnoreExtraProperties 
public class Person { 

private String name; 
private String address; 

public Person() { 
    /*Blank default constructor essential for Firebase*/ 
} 
//Getters and setters 
public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 
} 
Verwandte Themen