JsonMappingException:不能实例化从整数数字类型的值;没有单一的整数参数构造函数/工厂方法 [英] JsonMappingException: Can not instantiate value of type from Integral number; no single-int-arg constructor/factory method

查看:2900
本文介绍了JsonMappingException:不能实例化从整数数字类型的值;没有单一的整数参数构造函数/工厂方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图查询Firebase上我的JSON树中的一些数据。我继续创建我的POJO,但我不断得到 JsonMappingException:不能从积分数字实例化[simple type,class net.rmoreno.ally.Ally]类型的值;没有单一的整数参数构造函数/工厂方法错误。我已经这样做了,它只考虑了一个字符串电子邮件但它不断崩溃,并告诉我问题是一个积分数字。我该如何解决这个问题。



下面是让代码崩溃的代码

  query.addChildEventListener(new ChildEventListener(){

ArrayList< Ally> allyArrayList = new ArrayList<>;

@Override
public void onChildAdded(DataSnapshot dataSnapshot,String s){
for(DataSnapshot userSnapshot:dataSnapshot.getChildren()){
Ally information = userSnapshot.getValue(Ally.class);
allyArrayList.add(information );

}
}

这是我的POJO

  @JsonIgnoreProperties({latitude,longitude,phone,availability,email})
公共班同盟{

字符串名称;
//字符串电子邮件;
//字符串电话;
// int可用性;

public Ally(){

}

public String getName(){
返回名称;
}

// public String getEmail(){
// return email;
//

// public String getPhone(){
// return phone;
//

// public int getAvailability(){
// return availability;


$ / code $ / $ p

这是我的堆栈轨迹

  com.firebase.client.FirebaseException:无法在com.firebase.client.DataSnapshot.getValue(DataSnapshot)中键入
。 java:185)
at net.rmoreno.ally.MainActivity $ 1.onChildAdded(MainActivity.java:46)
at com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:58)
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:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop (Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java .la ng.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal。 os.ZygoteInit.main(ZygoteInit.java:694)
引起:com.fasterxml.jackson.databind.JsonMappingException:无法从Integral实例化[simple type,class net.rmoreno.ally.Ally]类型的值数;没有单一的整数参数构造函数/工厂方法
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromInt(StdValueInstantiator.java:320)
at com.fasterxml.jackson.databind。 deser.BeanDeserializerBase.deserializeFromNumber(BeanDeserializerBase.java:1012)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:138)
at com.fasterxml.jackson.databind。 deser.BeanDeserializer.deserialize(BeanDeserializer.java:123)
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 net.rmoreno.ally.MainActivity $ 1.onChildAdded(MainActivity.java:46 )
在com.firebase.client.core.ChildEventRegistrati on.fireEvent(ChildEventRegistration.java:58)
在com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
在com.firebase.client.core.view。 EventRaiser $ 1.run(EventRaiser.java:38)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)$ b.b android.os.Looper.loop(Looper.java:135)
android.app.ActivityThread.main(ActivityThread.java:5221)
在java.lang.reflect.Method。 invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899 )
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)



编辑:这是JSON结构在Firebase



解决方案

在您的JSON中,您有一个数组,其余的字段像 availability , email name 等存在于该数组中。

在Ally类中,你试图直接解析这些内部对象。



您应该做的是如下所示:

这是内部对象 Class:

 @JsonIgnoreProperties({latitude,longitude,phone,availability email})
public class ArrayObject {

private String name;
私人字符串电子邮件;
私人字符串电话;
private int availability;

public ArrayObject(){}

public String getName(){
return name;
}

public String getEmail(){
return email;
}

public String getPhone(){
return phone;
}

public int getAvailability(){
return availability;


$ / code $ / $ p

以下是 Ally 类:

  public class Ally {
private ArrayObject arrObj;
$ b $ * Getter-Setters * /

public Ally(){}
}


I'm trying to query some data that I have in my JSON Tree on Firebase. I go ahead and create my POJO but I keep getting the JsonMappingException: Can not instantiate value of type [simple type, class net.rmoreno.ally.Ally] from Integral number; no single-int-arg constructor/factory method error. I've made it so that it only takes into consideration a String email but it keeps crashing and telling me the problem is with an Integral number. How can I fix this.

Here is the code that makes it crash

query.addChildEventListener(new ChildEventListener() {

       ArrayList<Ally> allyArrayList = new ArrayList<>();

       @Override
       public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            for(DataSnapshot userSnapshot: dataSnapshot.getChildren()){
                Ally information = userSnapshot.getValue(Ally.class);
                allyArrayList.add(information);

      }
}

Here is my POJO

@JsonIgnoreProperties({"latitude", "longitude","phone","availability","email"})
public class Ally {

    String name;
    //String email;
    //String phone;
    //int availability;

    public Ally(){

    }

    public String getName(){
        return name;
    }

//    public String getEmail(){
//        return email;
//    }

//    public String getPhone(){
//        return phone;
//    }

//    public int getAvailability(){
//        return availability;
//    }
}

Here is my stack track

 com.firebase.client.FirebaseException: Failed to bounce to type
            at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185)
            at net.rmoreno.ally.MainActivity$1.onChildAdded(MainActivity.java:46)
            at com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:58)
            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:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class net.rmoreno.ally.Ally] from Integral number; no single-int-arg constructor/factory method
            at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromInt(StdValueInstantiator.java:320)
            at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromNumber(BeanDeserializerBase.java:1012)
            at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:138)
            at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:123)
            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 net.rmoreno.ally.MainActivity$1.onChildAdded(MainActivity.java:46)
            at com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:58)
            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:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

EDIT: Here is the JSON Structure on Firebase

解决方案

In your JSON you have an Array and the rest of the fields like availability, email and name etc. are present inside that array.

In the Ally Class you are trying to parse these inner objects directly.

What you should be doing instead is as follows:

Here is the Inner-Object Class:

@JsonIgnoreProperties({"latitude", "longitude","phone","availability","email"})
public class ArrayObject {

    private String name;
    private String email;
    private String phone;
    private int availability;

    public ArrayObject() {}

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public String getPhone() {
        return phone;
    }

    public int getAvailability() {
        return availability;
    }
}

Here is the Ally Class:

public class Ally {
    private ArrayObject arrObj;

    /* Getter-Setters */

    public Ally() {}
}

这篇关于JsonMappingException:不能实例化从整数数字类型的值;没有单一的整数参数构造函数/工厂方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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