E.Mich
E.Mich

Reputation: 129

Firebase setValue not working, "Failed to parse to snapshot"

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.

Upvotes: 0

Views: 1699

Answers (3)

OneCricketeer
OneCricketeer

Reputation: 191728

First. You are using outdated documentation. Even says so, if you scroll to the top of the link you provided.

YOU'RE VIEWING THE LEGACY DOCS


The issue here is this line, though.

public class User extends AppCompatActivity {

You seem to expect a User to be an Activity, which it, unfortunately, is not.

Create a separate User.java file with your User class contents.

You can also see that in the example link you provided.

public class User {

This is not extending any Activity.

Remove everything else except onCreate and follow Android naming convention in the activity class.

public class UserActivity extends AppCompatActivity {

Upvotes: 0

Bob Snyder
Bob Snyder

Reputation: 38299

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.

Upvotes: 1

Franklyn
Franklyn

Reputation: 325

I think alanRef those not have any connection with your fire base url. In your onCreate,change this.

 @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);
 }

To

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

    Firebase.setAndroidContext(this);

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

let see what happens.

Upvotes: 0

Related Questions