Java 检索时,Firebase无法跳转到类型
我在试图从Firebase检索时遇到了一些问题。以下是firebase中的“我的用户”表: 我试图像一个有多个字段的用户一样存储。我存储错了吗? My Users.java:Java 检索时,Firebase无法跳转到类型,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,我在试图从Firebase检索时遇到了一些问题。以下是firebase中的“我的用户”表: 我试图像一个有多个字段的用户一样存储。我存储错了吗? My Users.java: public class Users { public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Str
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
有什么想法吗?提前感谢。您的用户类需要一个无参数构造函数:
public Users() {
}
这一点在本文中进行了解释
我们不再处理原语类型,而是按照我们所做的做
保存用户时。我们将创建一个表示博客的Java类
邮递和上次一样,我们必须确保字段名匹配
Firebase数据库中属性的名称,并给出
类默认的无参数构造函数
您的Users类需要无参数构造函数:
public Users() {
}
这一点在本文中进行了解释
我们不再处理原语类型,而是按照我们所做的做
保存用户时。我们将创建一个表示博客的Java类
邮递和上次一样,我们必须确保字段名匹配
Firebase数据库中属性的名称,并给出
类默认的无参数构造函数
堆栈跟踪中明确提到了该错误: 原因:com.fasterxml.jackson.databind.exc.UnrecognizedProperty异常:无法识别的字段gab类实体。未标记为可忽略的用户7个已知属性:、地址、问题、用户名、密码、电子邮件、答案、电话] 由于您的JSON没有一个名为gab的属性,看起来您只是在JSON树中读取错误级别的数据 解决方案是将侦听器连接到“用户”节点树中较低的一级:
堆栈跟踪中明确提到了该错误: 原因:com.fasterxml.jackson.databind.exc.UnrecognizedProperty异常:无法识别的字段gab类实体。未标记为可忽略的用户7个已知属性:、地址、问题、用户名、密码、电子邮件、答案、电话] 由于您的JSON没有一个名为gab的属性,看起来您只是在JSON树中读取错误级别的数据 解决方案是将侦听器连接到“用户”节点树中较低的一级:
如果您的类未定义任何构造函数,编译器将生成默认的no args构造函数,Firebase代码将使用反射找到该构造函数。虽然我通常不依赖于这种编译器行为,但缺少显式的无参数构造函数不应该导致这里的问题。@Frank:Ooops。我的错。我没有使用Firebase的旧版本,而是依赖文档-@嘿,但这并不能解决问题。你有什么想法吗?从这个意义上讲,文档是未经修改的。该指南将记录推荐的做法,即即使技术上不需要,也要包括这样的构造函数。但这并不是这个错误的原因。我下面的答案是原因。像往常一样,详细信息在堆栈跟踪中,尽管也像往常一样不容易解析。@BobSnyder您救了我的命如果您的类没有定义构造函数,编译器将生成默认的无参数构造函数,Firebase代码将使用反射找到该构造函数。虽然我通常不依赖于这种编译器行为,但缺少显式的无参数构造函数不应该导致这里的问题。@Frank:Ooops。我的错。我没有使用Firebase的旧版本,而是依赖文档-@嘿,但这并不能解决问题。你有什么想法吗?从这个意义上讲,文档是未经修改的。该指南将记录推荐的做法,即即使技术上不需要,也要包括这样的构造函数。但这并不是这个错误的原因。我下面的答案是原因。像往常一样,细节在堆栈跟踪中,尽管也像往常一样不容易解析。@BobSnyder你救了我的命我明白了我明白了。对不起,我的错。我忘了我添加了一个子级别来进行分类,这样我的数据就更清晰了。谢谢你指出错误!我明白了,我明白了。对不起,我的错。我忘了我添加了一个子级别来进行分类,这样我的数据就更清晰了。谢谢你指出错误!