Firebase setValue无效,“无法解析为快照” [英] Firebase setValue not working, "Failed to parse to snapshot"

查看:216
本文介绍了Firebase setValue无效,“无法解析为快照”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用setValue函数将定义的用户对象发送到Firebase数据库,但没有成功。即使是这里显示的文档示例也没有为我工作。
$ b


无法分析快照

我的代码:

  import android.support.v7.app.AppCompatActivity; 
导入android.os.Bundle;

import com.firebase.client.Firebase;

public class User extends AppCompatActivity {
private int birthYear;
private String fullName;

public User(){

}

public User(String fullName,int birthYear){
this.fullName = fullName;
this.birthYear = birthYear;
}

public long getBirthYear(){
return birthYear;
}

public String getFullName(){
return fullName;


$ b @Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);

Firebase.setAndroidContext(this);
Firebase ref =新的Firebase(https://mybabysit.firebaseio.com/);
Firebase alanRef = ref.child(users)。child(alanisawesome);
用户alan =新用户(Alan Turing,1912);
alanRef.setValue(alan);


$ / code $ / pre
$ b $ p

我得到以下错误:

  AndroidRuntime:致命例外:main 
过程:com.example.lerun.crazybugs,PID:4243
java.lang。 RuntimeException:无法启动活动ComponentInfo {com.example.lerun.crazybugs / com.example.lerun.crazybugs.User}:com.firebase.client.FirebaseException:未能解析到快照
在android.app.ActivityThread .performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper .java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
引起:com.firebase.client.FirebaseException:无法解析到快照
在com.firebase.client.Firebase.setValueInternal(Firebase.java:357)
在com.firebase.client.Firebase。 (android.app.Activity.performCreate(Activity.java:6237))
(com.example.lerun.crazybugs.User.onCreate(User.java:38)
在android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)
在andro在android.app.ActivityThread.main中使用
(ActivityThread.java:id.os.Handler.dispatchMessage(Handler.java:102))
android.os.Looper.loop(Looper.java:148) 5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
导致:java.lang.IllegalArgumentException:属性changingConfigurations的getter定义冲突:android.app.Activity#isChangingConfigurations(0 params )vs android.app.Activity#getChangingConfigurations(0 params)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2615)
at com.fasterxml.jackson.databind.ObjectMapper .convertValue(ObjectMapper.java:2542)
at com.firebase.client.Firebase.setValueInternal(Firebase.java:346)
at com.firebase.client.Firebase.setValue(Firebase.java:24 8)
at com.example.lerun.crazybugs.User.onCreate(User.java:38)
at android.app.Activity.performCreate(Activity.java:6237)
at android .app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476 )
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)
at android.os.Handler .dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at 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.ma在(ZygoteInit.java:616)
引起:com.fasterxml.jackson.databind.JsonMappingException:属性changingConfigurations的getter定义的冲突:android.app.Activity#isChangingConfigurations(0 params)vs android.app。活动#getChangingConfigurations(0参数)
在com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:838)
在com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java :387)
at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:478)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:97 )
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2593)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542)
在com.firebase.client.Fire base.setValueInternal(Firebase.java:346)
at com.firebase.client.Firebase.setValue(Firebase.java:248)
at com.example.lerun.crazybugs.User.onCreate(User。 java:38)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app .ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop (Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com .android.internal.o s.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
引起:java.lang.IllegalArgumentException: android.app.Activity#isChangingConfigurations(0 params)vs android.app.Activity#getChangingConfigurations(0 params)
在com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getGetter (POJOPropertyBuilder.java:190)
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getAccessor(POJOPropertyBuilder.java:283)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.removeIgnorableTypes (BeanSerializerFactory.java:678)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanProperties(BeanSerializerFactory.java:557)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanSerializer (BeanSerializerFactory.java:373)
在com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanSerializer(BeanSerializerFactory.java:268)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:213)
在com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:152)
at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:873)
at com (SerializerProvider.java:833)
at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer .databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:478)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:97)
at com.fasterxml.j ackson.databind.ObjectMapper._convert(ObjectMapper.java:2593)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542)
at com.firebase.client.Firebase。 setValueInternal(Firebase.java:346)
at com.firebase.client.Firebase.setValue(Firebase.java:248)
at com.example.lerun.crazybugs.User.onCreate(User.java: 38)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread .performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper .loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)$ b $ at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
code>

为什么会发生这种情况的任何想法都将被大大地抹杀。谢谢。

解决方案

在您对我的评论的回复中,您要求提供更多详细信息。我不是这个问题的权威人士,但我会分享我从阅读中学到的东西文档和在此处浏览主题。



您发布的堆栈跟踪显示您使用的是旧版本的Firebase,用于序列化数据的 Jackson库。目前的版本,9.0.2,不使用杰克逊和支持的东西有所不同。如果你继续使用旧版本,你应该看看这个 SO问题/答案以获取详细解释。



Jackson和当前的实现使用内省/反射来序列化/反序列化一个POJO。处理期望POJO遵循关于结构和命名的某些约定。这方面的文件有点薄。通过查看相关的SO问题,您经常可以找到文档中未涉及的问题的答案。一些示例:继承 getter methods 枚举的。我的建议是:保持简单,并遵循经过验证的例子。

虽然我不明白是什么导致了你遇到的失败,但很容易想象,杰克逊的内省处理是不堪重负的分析你的用户类和所有的超类,从AppCompatActivity开始。


I'm trying to use setValue function to send a User object I defined to the Firebase database but without success. Even the documentation example shown here doesn't work for me. I'm getting this error

Failed to parse to snapshot

My code:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.firebase.client.Firebase;

public class User extends AppCompatActivity {
    private int birthYear;
    private String fullName;

    public User() {

    }

    public User(String fullName, int birthYear) {
        this.fullName = fullName;
        this.birthYear = birthYear;
    }

    public long getBirthYear() {
        return birthYear;
    }

    public String getFullName() {
        return fullName;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);

        Firebase.setAndroidContext(this);
        Firebase ref = new Firebase("https://mybabysit.firebaseio.com/");
        Firebase alanRef = ref.child("users").child("alanisawesome");
        User alan = new User("Alan Turing", 1912);
        alanRef.setValue(alan);
    }
}

I get the following errors:

AndroidRuntime: FATAL EXCEPTION: main
   Process: com.example.lerun.crazybugs, PID: 4243
   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lerun.crazybugs/com.example.lerun.crazybugs.User}: com.firebase.client.FirebaseException: Failed to parse to snapshot
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
       at android.app.ActivityThread.-wrap11(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5417)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    Caused by: com.firebase.client.FirebaseException: Failed to parse to snapshot
       at com.firebase.client.Firebase.setValueInternal(Firebase.java:357)
       at com.firebase.client.Firebase.setValue(Firebase.java:248)
       at com.example.lerun.crazybugs.User.onCreate(User.java:38)
       at android.app.Activity.performCreate(Activity.java:6237)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.app.ActivityThread.main(ActivityThread.java:5417) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.IllegalArgumentException: Conflicting getter definitions for property "changingConfigurations": android.app.Activity#isChangingConfigurations(0 params) vs android.app.Activity#getChangingConfigurations(0 params)
       at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2615)
       at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542)
       at com.firebase.client.Firebase.setValueInternal(Firebase.java:346)
       at com.firebase.client.Firebase.setValue(Firebase.java:248) 
       at com.example.lerun.crazybugs.User.onCreate(User.java:38) 
       at android.app.Activity.performCreate(Activity.java:6237) 
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.app.ActivityThread.main(ActivityThread.java:5417) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: com.fasterxml.jackson.databind.JsonMappingException: Conflicting getter definitions for property "changingConfigurations": android.app.Activity#isChangingConfigurations(0 params) vs android.app.Activity#getChangingConfigurations(0 params)
       at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:838)
       at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:387)
       at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:478)
       at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:97)
       at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2593)
       at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542) 
       at com.firebase.client.Firebase.setValueInternal(Firebase.java:346) 
       at com.firebase.client.Firebase.setValue(Firebase.java:248) 
       at com.example.lerun.crazybugs.User.onCreate(User.java:38) 
       at android.app.Activity.performCreate(Activity.java:6237) 
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.app.ActivityThread.main(ActivityThread.java:5417) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.IllegalArgumentException: Conflicting getter definitions for property "changingConfigurations": android.app.Activity#isChangingConfigurations(0 params) vs android.app.Activity#getChangingConfigurations(0 params)
       at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getGetter(POJOPropertyBuilder.java:190)
       at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getAccessor(POJOPropertyBuilder.java:283)
       at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.removeIgnorableTypes(BeanSerializerFactory.java:678)
       at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanProperties(BeanSerializerFactory.java:557)
       at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanSerializer(BeanSerializerFactory.java:373)
       at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanSerializer(BeanSerializerFactory.java:268)
       at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:213)
       at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:152)
       at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:873)
       at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:833)
       at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:387) 
       at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:478) 
       at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:97) 
       at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2593) 
       at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542) 
       at com.firebase.client.Firebase.setValueInternal(Firebase.java:346) 
       at com.firebase.client.Firebase.setValue(Firebase.java:248) 
       at com.example.lerun.crazybugs.User.onCreate(User.java:38) 
       at android.app.Activity.performCreate(Activity.java:6237) 
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.app.ActivityThread.main(ActivityThread.java:5417) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Any idea for why this happens will be greatly appreaciated. thanks.

解决方案

In your response to my comment, you asked for more details. I'm not an authority on the subject but I'll share what I've learned from reading the documentation and browsing topics here on SO.

The stack trace you posted shows that you are using an older version of Firebase that uses the Jackson library to serialize data. The current version, 9.0.2, does not use Jackson and there are differences in what is supported. If you continue to use the older version, you should look at this SO question/answer for a detailed explanation.

Both Jackson and the current implementation use introspection/reflection to serialize/deserialize a POJO. The processing expects the POJO to follow certain conventions regarding structure and naming. The documentation is a little thin in this area. You will often find the answers to issues not covered in the documentation by looking at related SO questions. Some examples: inheritance, getter methods, enums. My recommendation is: keep is simple and follow proven examples.

Although I don't know specifically what caused the failure you experienced, it's easy to imagine that the Jackson introspection processing was overwhelmed analyzing your User class and all of its super-classes, starting with AppCompatActivity.

这篇关于Firebase setValue无效,“无法解析为快照”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆