【问题标题】:Firebase Unknown Property ExceptionFirebase 未知属性异常
【发布时间】:2016-07-27 02:21:47
【问题描述】:

我一直在尝试了解 Firebase,但在我的第一个示例中出现了一个我根本不理解的错误。如果有人可以帮助我,我将非常感激

这是我的 MAINACTIVITY.JAVA

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

        }
    });
}

}

这是我的 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;
}
}

这是我的 CONFIG.JAVA

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/";


}

这个 ID 是安卓显示器

07-26 21:07:06.917 6408-6408/com.example.betterlaylow.firebasetestinsertretrieve E/AndroidRuntime: 致命异常: main 进程:com.example.betterlaylow.firebasetestinsertretrieve,PID:6408 com.firebase.client.FirebaseException:无法反弹输入 在 com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185) 在 com.example.betterlaylow.firebasetestinsertretrieve.MainActivity$1$1.onDataChange(MainActivity.java:66) 在 com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 在 com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 在 com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“msg”(com.example.betterlaylow.firebasetestinsertretrieve.Person 类),未标记为可忽略(2 个已知属性:、“地址”、“名称” ]) 在 [来源:java.io.StringReader@f02156a;行:1,列:9](通过引用链:com.example.betterlaylow.firebasetestinsertretrieve.Person["msg"]) 在 com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555) 在 com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708) 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 在 com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 在 com.example.betterlaylow.firebasetestinsertretrieve.MainActivity$1$1.onDataChange(MainActivity.java:66) 在 com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 在 com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 在 com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    您已对侦听器进行了编码,期望在“Person”位置下有多个Person 实例。为此,您需要为使用push() 方法DatabaseReference 创建的每个人创建一个唯一密钥:

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

    或者,如果您只希望在“Person”位置有一个Person,请像这样更改侦听器:

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

    另外,您使用的 Firebase SDK 不是当前的。如果您刚刚开始使用 Firebase,为什么不使用 the latest?

    【讨论】:

      【解决方案2】:

      您的班级缺少 @IgnoreExtraProperties。 像这样编写你的 POJO 类:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 2017-10-13
        • 1970-01-01
        • 2011-01-24
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        相关资源
        最近更新 更多