android - Firebase异常 : Failed to bounce to type

标签 android firebase firebase-realtime-database

谁能解释一下我做错了什么,下面我贴出我的代码

enter image description here

我的意大利面课

public class Pasta {
String Name;
String Desc;
String Price;
String Temp;

public Pasta() {
}

public Pasta(String name, String desc, String price, String temp) {
    Name = name;
    Desc = desc;
    Price = price;
    Temp = temp;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getDesc() {
    return Desc;
}

public void setDesc(String desc) {
    Desc = desc;
}

public String getPrice() {
    return Price;
}

public void setPrice(String price) {
    Price = price;
}

public String getTemp() {
    return Temp;
}

public void setTemp(String temp) {
    Temp = temp;
}

我的 Java 代码

Ref.child("Products").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //Pasta List
            for (DataSnapshot pasta : dataSnapshot.child("Pasta").getChildren()) {
                Pasta p = pasta.getValue(Pasta.class);
                ProductsFragment.pastaArrayList.add(p);//My Pasta ArrayList
                Log.e("Pasta Object: ",p.getName());
            }

异常

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pizzanpasta, PID: 5177
com.firebase.client.FirebaseException: Failed to bounce to type
    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183)
    at com.pizzanpasta.Handlers.FirebaseHandler$1.onDataChange(FirebaseHandler.java:74)
    at com.firebase.client.Query$1.onDataChange(Query.java:158)
    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)
    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:808)
    at android.os.Handler.dispatchMessage(Handler.java:103)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:5300)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Name" (class com.pizzanpasta.Models.Pasta), not marked as ignorable (4 known properties: , "desc", "price", "name", "temp"])
    at [Source: java.io.StringReader@42e16a68; line: 1, column: 10] (through reference chain: com.pizzanpasta.Models.Pasta["Name"])
    at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
    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)
    at com.pizzanpasta.Handlers.FirebaseHandler$1.onDataChange(FirebaseHandler.java:74) 
    at com.firebase.client.Query$1.onDataChange(Query.java:158) 
    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 
    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:808) 
    at android.os.Handler.dispatchMessage(Handler.java:103) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:5300) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646) 
    at dalvik.system.NativeStart.main(Native Method) 

如果我不投snapsnot上课

for (DataSnapshot pasta : dataSnapshot.child("Pasta").getChildren()) {
                Log.e("Pasta Node; ", pasta.toString());
            }

即日志结果:

05-14 15:18:13.865 10913-10913/com.pizzanpasta E/Pasta Node;: DataSnapshot { key = Bolognese (Beef), value = {Name=Bolognese (Beef), Temp=temp, Desc=Bolognese Pasta with Red sause, Price=400} }
05-14 15:18:13.866 10913-10913/com.pizzanpasta E/Pasta Node;: DataSnapshot { key = Chicken La'Primavera, value = {Name=Chicken La'Primavera, Temp=temp, Desc=Backed Chicken La'Primavera Pasta, Price=400} }
05-14 15:18:13.866 10913-10913/com.pizzanpasta E/Pasta Node;: DataSnapshot { key = Lasagne, value = {Name=Lasagne, Temp=temp, Desc=Backed Lasagne Pasta, Price=300} }
05-14 15:18:13.866 10913-10913/com.pizzanpasta E/Pasta Node;: DataSnapshot { key = Marinara, value = {Name=Marinara, Temp=temp, Desc=Marinara Pasta with Red sause, Price=400} }

在日志结果中,您可以看到它类似于 Pasta 类,但我无法将其转换为 Pasta 类对象

最佳答案

因为你的 setter 方法被命名为 setName(...) Jackson 假定变量被命名为 name 因为 Java 命名约定。

这是您问题的原因。

解决此问题的最佳方法应该是在 Firebase 数据库中使用“desc”、“price”、“name”、“temp”。

否则你可以使用 @JsonProperty注释,像这样:

@JsonProperty("Name")
public void setName(String n) {
   // ...
}

关于android - Firebase异常 : Failed to bounce to type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37225468/

相关文章:

android - admob 横幅广告和插页式广告的相同 AdRequest 或不同的 AdRequest?

java - 我如何在 android studio 中模糊我的 textview 的背景

android - 调用新 Activity 时从返回堆栈中删除所有 Activity

android - Flutter:在 channel plugins.flutter.io/path_provider 上找不到方法 getApplicationDocumentsDirectory 的实现

javascript - 如何在我的 React 应用程序中使用 Firebase 身份验证强制注册?

android - FCM 消息传递不可靠,存在一些消息传递延迟

node.js - Node js Json 添加数组

java - 如何按降序对映射条目的键值进行排序?

ios - 当 firebase 完成时向函数添加完成,iOS,Swift

ios - 从 firebase 获取子节点的子节点(swift 3)