【问题标题】:Firebase failed to bounce to type when retrievingFirebase 检索时无法弹回输入
【发布时间】:2016-07-01 03:38:40
【问题描述】:

我在尝试从 Firebase 检索时遇到了一些问题。这是我在 firebase 中的“用户”表:

我正在尝试像具有多个字段的用户一样存储。我存储错了吗?

我的用户.java:

public class Users {
public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}

public String getAddress() {
    return address;
}

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

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getQuestion() {
    return question;
}

public void setQuestion(String question) {
    this.question = question;
}

public String getAnswer() {
    return answer;
}

public void setAnswer(String answer) {
    this.answer = answer;
}

private String userName;
private String password;
private String address;
private String phone;
private String email;
private String question;
private String answer;

}

我尝试从 Firebase 检索 JSON 时的部分:

btnSignin.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            //Creating firebase object
            Firebase ref = new Firebase(Config.FIREBASE_URL);
            //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
                        Users user = postSnapshot.getValue(Users.class);
                        System.out.println(user.getUserName()); //Testing

                    }
                }

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

但是,我收到以下错误消息:

07-01 11:32:50.735 1025-1025/com.apps E/AndroidRuntime: FATAL EXCEPTION: main
com.firebase.client.FirebaseException: Failed to bounce to type
    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185)
    at com.gabrielheng.zhapalangapps.Login$1$1.onDataChange(Login.java:49)
    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:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4512)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "gab" (class Entity.Users), not marked as ignorable (7 known properties: , "address", "question", "userName", "password", "email", "answer", "phone"])
    at [Source: java.io.StringReader@416d8540; line: 1, column: 9] (through reference chain: Entity.Users["gab"])
    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:183)
    at com.gabrielheng.zhapalangapps.Login$1$1.onDataChange(Login.java:49) 
    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:605) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4512) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 
    at dalvik.system.NativeStart.main(Native Method) 
07-01 11:32:50.790 1025-1026/com.apps D/dalvikvm: GC_CONCURRENT freed 456K, 13% free 9663K/11015K, paused 21ms+7ms

有什么想法吗?提前致谢。

【问题讨论】:

    标签: java android json firebase firebase-realtime-database


    【解决方案1】:

    堆栈跟踪中明确提到了该错误:

    原因:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“gab”(Entity.Users 类),未标记为可忽略(7 个已知属性:、“地址”、“问题”、“用户名” ", "密码", "email", "answer", "phone"])

    由于您的 JSON 没有名为 gab 的属性,因此您似乎只是在 JSON 树中的错误级别读取数据。

    解决方案是在Users 节点的树中将您的侦听器附加到低一级:

    Firebase ref = new Firebase(Config.FIREBASE_URL);
    //Value event listener for realtime data update
    ref.child("Users").addValueEventListener(new ValueEventListener() {
        ...
    

    【讨论】:

    • 我明白了。对不起这是我的错。我忘了我添加了一个子级别来整理它,以便我的数据更清晰。感谢您指出错误!
    【解决方案2】:

    您的 Users 类需要一个无参数构造函数:

    public Users() {
    }
    

    the documentation 对此进行了解释。

    我们将做我们所做的,而不是处理原始类型 保存用户时。我们将创建一个代表博客的 Java 类 邮政。像上次一样,我们必须确保我们的字段名称匹配 Firebase 数据库中的属性名称,并给出 类一个默认的无参数构造函数

    【讨论】:

    • 如果您的类没有定义构造函数,编译器将生成一个默认的无参数构造函数,Firebase 代码将使用反射找到该构造函数。虽然我通常不会依赖这种编译器行为,但缺少显式的无参数构造函数应该不会导致这里出现问题。
    • @Frank:哎呀。我的错。我没有使用旧版本的 Firebase 并且依赖于文档。 ;-)
    • @qbix 嘿,但这并不能解决问题。你有什么想法吗?
    • 在这个意义上,文档是未经修改的。该指南将记录推荐的做法,即包含这样的构造函数(即使在技术上不需要它)。但这不是导致此错误的原因。我在下面的回答是的原因。像往常一样,详细信息在堆栈跟踪中,尽管(也像往常一样)不容易解析。
    • @BobSnyder 你救了我的命
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多