【问题标题】:Failed to bounce to type弹跳输入失败
【发布时间】:2016-06-15 14:37:19
【问题描述】:

我有一个数据库,我想从中选择一个特定的节点。例如,在我的情况下,我想选择用户名是“fatma”的节点。那么我怎么能在android中做到这一点?

公共类用户{

公共字符串用户名、电子邮件、密码、dateOfBirth、signUpDate;

public User(String username, String email, String password,String dateOfBirth,String signUpDate) {
    this.username = username;
    this.email = email;
    this.password = password;
    this.dateOfBirth=dateOfBirth;
    this.signUpDate=signUpDate;
}
public User(){

}

public String getEmail() {
    return email;
}

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

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 getDateOfBirth() {
    return dateOfBirth;
}

public void setDateOfBirth(String dateOfBirth) {
    this.dateOfBirth = dateOfBirth;
}

public String getSignUpDate() {
    return signUpDate;
}

public void setSignUpDate(String signUpDate) {
    this.signUpDate = signUpDate;
}

@Override
public String toString() {
    return "User{" +
            "username='" + username + '\'' +
            ", email='" + email + '\'' +
            ", password='" + password + '\'' +
            ", dateOfBirth='" + dateOfBirth + '\'' +
            ", signUpDate='" + signUpDate + '\'' +
            '}';
}

}

Firebase.setAndroidContext(getApplicationContext());
            final Firebase ref = new Firebase("https://app.firebaseio.com/");
           /* String username,password;
            username=txtUsername.getText().toString();
            password=txtPassword.getText().toString();
            User authentificatedUser=new User(username,password,null,null,null);
            ConnectTask connectTask=new ConnectTask(authentificatedUser);
     txtUsername.setText(connectTask.getTest());*/

            Query query = ref.orderByChild("username").equalTo("testme");
            query.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    User user = dataSnapshot.getValue(User.class);
                    txtUsername.setText(user.getUsername());
                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }

            });

06-15 13:50:59.067 7510-7510/com.sifast.appsocle E/AndroidRuntime: 致命异常: main 进程:com.sifast.appsocle,PID:7510 com.firebase.client.FirebaseException:无法反弹输入 在 com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 在 com.sifast.appsocle.Login$2$1.onDataChange(Login.java:71) 在 com.firebase.client.Query$1.onDataChange(Query.java:158) 在 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:无法识别的字段“-KKJOx4bBAgpJ3UPD-0a”(com.sifast.appsocle.user.User 类),未标记为可忽略(5 个已知属性:“signUpDate”, “用户名”、“出生日期”、“密码”、“电子邮件”]) 在 [来源:java.io.StringReader@c6fea0d;行:1,列:26](通过引用链:com.sifast.appsocle.user.User["-KKJOx4bBAgpJ3UPD-0a"]) 在 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:181) 在 com.sifast.appsocle.Login$2$1.onDataChange(Login.java:71) 在 com.firebase.client.Query$1.onDataChange(Query.java:158) 在 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)

【问题讨论】:

  • 完整的logcat错误会很有用,但我可以说Failed to bounce to type意味着数据库中的字段类型与对象中的相应变量类型不匹配
  • PID: 7510 com.firebase.client.FirebaseException: 无法在 com.sifast.appsocle.Login$2 的 com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 处反弹键入$1.onDataChange(Login.java:71)
  • 我需要所有这些。您可以编辑您的问题以添加它。
  • 我编辑了帖子
  • 所以,如您所见,您正在尝试使用“-KKJOx4bBAgpJ3UPD-0a”创建对象用户:)

标签: android firebase


【解决方案1】:

您的 Firebase 引用有误。

Unrecognized field "-KKJOx4bBAgpJ3UPD-0a"

这意味着您在节点user 中,并且您正在尝试将-KKJOx4bBAgpJ3UPD-0a 转换为User 中的字段。我猜你有/将会有不止一个User。因此,您可能希望通过以下方式一一解析快照的子节点:

for(DataSnapshot user : dataSnapshot.getChildren()){
    User myUser = user.getValue(User.class);
}

【讨论】:

  • @fatma19 在此处发布您对用户节点的引用
  • @fatma19 感叹号没有帮助。如果您在进行此更改后仍然遇到同样的问题,请edit your question 包含更新后的代码。
  • @TheSunshinator 他正在通过等于指定名称的孩子进行查询。如果他只有一个同名的用户,查询将只返回一个用户:)
  • 我认为他可能不知道 UID。当然如果他有并且只需要那个用户,他可以直接获取它。
【解决方案2】:

添加对用户节点的引用,这应该可以解决问题。 通过此引用 (https://app.firebaseio.com/),您正在下载所有数据,这会导致错误无法退回到类型。 @fatma19 您应该使用此参考:https://app.firebaseio.com/users。 好的,如果我们有正确的参考,我们可以开始查询数据。 再次,

Firebase firebase = new Firebase("https://app.firebaseio.com/users");
Query query = firebase.orderByChild("username").equalTo("testme");
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        //if u have unique usernames
        User user = snapshot.getValue(User.class);
        //if u haven't unique usernames
        Iterable<DataSnapshot> dataSnapshots = snapshot.getChildren();
                List<User> users = new ArrayList<>();
                for(DataSnapshot dataSnapshot1 : dataSnapshots){
                    users(dataSnapshot1.getValue(User));
                }
        //or
        List<User> users = new ArrayList<>();
        for(DataSnapshot dataSnapshot : snapshot.getChildren()){
             users.add(dataSnapshot.getValue(User.class);
        }
    }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
    }
});

【讨论】:

  • 您能在 dataSnapshot 中写下您收到的数据吗?
  • 用户用户 = dataSnapshot.getValue(User.class);
  • 我改了,但总是一样
  • 我不是这个意思。使用 logcat (Log.e(TAG, dataSnapshot.toString());) :)
  • 我对您的代码进行了一些更改,它可以工作 :) 非常感谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2012-09-15
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多