尝试调用虚方法' java.lang.Class java.lang.Object.getClass()'尽管初始化对象,但在null对象引用上

时间:2015-10-06 18:13:58

标签: java android

好的,上次我问过这个问题时,在删除它之前,它被3个人投了赞成票。可能它不清楚,对不起我的错。所以我正在使用改造来制作api命中。 api返回一个JSON,其字段数据可以为null。所以JSON可以是这样的。

{
    "title": "Product",
    "description": "A product from Acme's catalog",
    "type": "object"
    "data":null
}

当它不为null时,它将类似于

{
    "title": "Product",
    "description": "A product from Acme's catalog",
    "type": "object"
    "data":{"b":"xyz","a":123}
}

现在我有了这个对象的模型类

public class A {

    @Expose
    public String title;

    @Expose
    public String description;

    @Expose
    public String type;

    @Expose
    public Data data =new Data();

    public Data getData() {
        return data;
    }

    public void setData(Data data) {
        this.data = data;
    }

}

这是数据模型

public class Data {

    public Data(){
        this.a=0;
        this.b="";
    }

    @Expose
    public double a;

    @Expose
    public String b="";


    public Double getA() {
        return a;
    }

    public void setA(Double a) {
        this.a = a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }

}

Retrofit会将JSON转换为A类型的Java对象。现在我对这个A类对象做的下一件事是将它转换为另一个B类对象。

为了进行转换,我使用了一个实用程序类。其描述如下

This utility converts one java object to another java object.
     * does not support Inheritance
     * Mainly useful for when you have two Class one for Restful call and another for ORM suite
     * if you get one object from RESTFUL call and another object to be created to save in ORM then generally we
     * create another object and manually put the value by setter and getter
     * just keep the same field name in both class and use this utility  function to assign value from one to another
     * and then use another to save in db. So no more stupid getter setter use, it handles nested class and Collection field .

现在我遇到的问题是这个类抛出异常

Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference

这是我得到的唯一错误,没有别的。 stacktrace很干净,只是这个错误。基本上对象转换失败了。共振很可能是因为数据字段为空,因为在此之前我没有收到任何此类错误。

这是我的实用工具类(负责对象转换的代码)的一部分代码。我将两个对象类型传递给一个源和另一个目标。在这种情况下,源是A类型的对象。但是第一行引起了我在问题中提到的异常。

        // get the class of source object
        Class sourceObjectType = sourceObject.getClass();
        // get the class of destination object
        Class destinationObjectType = destinationObject.getClass();

现在我不知道如何处理这个异常。我尝试创建一个构造函数,以便Data不为null但这不起作用。如果有人能提出建议或帮助我,那就太好了。谢谢!!

1 个答案:

答案 0 :(得分:1)

您可以使用简单的if:

首先检查destinationObjectType是否为null
    if(destinationObjectType){
        // handle your condition here
    }

或者您可以处理异常:

try{
        // get the class of source object
        Class sourceObjectType = sourceObject.getClass();
        // get the class of destination object
        Class destinationObjectType = destinationObject.getClass();

}
catch(NullPointerException e){

        // Handle your exception here
}

问候!