Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:实例化时不设置作为其他类实例的类数据成员_Java_Android_Class_Object_Instantiation - Fatal编程技术网

Java:实例化时不设置作为其他类实例的类数据成员

Java:实例化时不设置作为其他类实例的类数据成员,java,android,class,object,instantiation,Java,Android,Class,Object,Instantiation,我正在开发一个Android应用程序,我有一个基本的客户类,它有一个国籍数据成员,而国籍数据成员又是另一个公共类。当我实例化一个新客户时,国籍和出生日期成员(非原始数据类型)都没有设置(调用其getter会导致空引用异常) 顺便说一句,我正在使用AndroidStudio,我正在通过一个JSON包装器创建一个新的客户实例,该包装器接收来自RESTfulWeb服务调用的数据 public class Customer { // Private fields private int

我正在开发一个Android应用程序,我有一个基本的客户类,它有一个国籍数据成员,而国籍数据成员又是另一个公共类。当我实例化一个新客户时,国籍和出生日期成员(非原始数据类型)都没有设置(调用其getter会导致空引用异常)

顺便说一句,我正在使用AndroidStudio,我正在通过一个JSON包装器创建一个新的客户实例,该包装器接收来自RESTfulWeb服务调用的数据

public class Customer
{
    // Private fields
    private int Id;
    private String FirstName;
    private String LastName;
    private String OfficeNumber;
    private String MobileNumber;
    private String EmailAddress;
    private boolean Gender;
    private Date BirthDate;
    private Nationality Nationality;

    /* Setters & Getters */
    public int getId() {
        return Id;
    }
    public void setId(int id) {
        Id = id;
    }

    public String getFirstName() {
        return FirstName;
    }
    public void setFirstName(String firstName) {
        FirstName = firstName;
    }

    public String getLastName() {
        return LastName;
    }
    public void setLastName(String lastName) {
        LastName = lastName;
    }

    public String getOfficeNumber() {
        return OfficeNumber;
    }
    public void setOfficeNumber(String officeNumber) {
        OfficeNumber = officeNumber;
    }

    public String getMobileNumber() {
        return MobileNumber;
    }
    public void setMobileNumber(String mobileNumber) {
        MobileNumber = mobileNumber;
    }

    public String getEmailAddress() {
        return EmailAddress;
    }
    public void setEmailAddress(String emailAddress) {
        EmailAddress = emailAddress;
    }

    public boolean getGender() {
        return Gender;
    }
    public void setGender(boolean gender) {
        Gender = gender;
    }

    public Date getBirthDate() {
        return BirthDate;
    }
    public void setBirthDate(Date birthDate) {
        BirthDate = birthDate;
    }

    public Nationality getNationality() {
        return Nationality;
    }
    public void setNationality(Nationality nationality) {Nationality = nationality; }
}
民族阶级

public class Nationality
{
    // Private Fields
    private int Id;
    private String NationalityEn;
    private String NationalityAr;

    public Nationality(int id, String nationalityEn, String nationalityAr)
    {
        setId(id);
        setNationalityEn(nationalityEn);
        setNationalityAr(nationalityAr);
    }

    public Nationality(){}

    // Setters & Getters
    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getNationalityEn() {
        return NationalityEn;
    }

    public void setNationalityEn(String nationalityEn) {
        NationalityEn = nationalityEn;
    }

    public String getNationalityAr() {
        return NationalityAr;
    }

    public void setNationalityAr(String nationalityAr) {
        NationalityAr = nationalityAr;
    }
}
包装器:

public class JSONToObjectWarpper
{
    public Customer getCustomerObject(JSONObject jsonObject)
    {
        Customer customer = new Customer();

        try
        {
            JSONObject js = jsonObject.getJSONObject("Customer");
            Nationality nationality = new Nationality(
                    js.getJSONObject("Nationality").getInt("Id"),
                    js.getJSONObject("Nationality").getString("NationalityEn"),
                    js.getJSONObject("Nationality").getString("NationalityAr")
            );
            Date date = ConvertFromWCFDate(js.getString("BirthDate"));

            customer.setId(js.getInt("Id"));
            customer.setFirstName(js.getString("FirstName"));
            customer.setLastName(js.getString("LastName"));
            customer.setOfficeNumber(js.getString("OfficeNumber"));
            customer.setMobileNumber(js.getString("MobileNumber"));
            customer.setEmailAddress(js.getString("EmailAddress"));
            customer.setGender(js.getBoolean("Gender"));
            customer.setBirthDate(date);
            customer.setNationality(nationality);

        }
        catch (JSONException e)
        {
            // Handle the Exception Here
        }
        return customer;
    }
}

我错过了什么?!提前感谢您的帮助。

在catch块中处理异常并打印异常堆栈,以查看到底发生了什么以及异常的确切来源。另外,打印JSON对象,以确保实际接收到数据,并且获得正确的属性。

您真的在处理该异常吗?您需要从catch块打印该异常,以便跟踪任何错误----“我在这里遗漏了什么?”调试代码以查看发生了什么。或者,如果您需要帮助,向我们显示JSON文本。JSON中有什么?我不确定您在这里试图做什么,但请确保您没有一个空对象,您正在尝试从返回的JSON获取值:{“客户”:{“生日”:“/Date(551217600000+0400)/,“EmailAddress”:null,“FirstName”:“某人”,“性别”:0,“Id”:1,“LastName”:“某人”,“MobileNumber”:“123456789”,“National”:{“Id”:157,“NationalityAr”:“Some Nat.”,“NationalityEn”:“Some Nat.”},“OfficeNumber”:“123456789”,}}}我不太确定,他的代码“catch(JSONException e)”上的catch是否处理空引用异常,或者他需要使用类似于“catch(Exception e)”的父异常类“?此捕获用于处理任何JSON异常,由于从web服务接收的JSON对象完好无损且没有任何问题,因此无法访问该异常。问题是,包装器返回的对象的BirthDate和national都为null,而所有其他属性/数据成员都设置为正确的值。异常即将发生。”来自另一段代码,该代码尝试使用返回的customer对象并获取其内部对象。通过添加额外的catch块来处理JSON异常和NullPointerException。通常,对于异常处理,我将使用父异常来处理未知/意外的异常,这些异常不是由它们的用户单独处理的拥有catch块并将其用于日志记录。从那里我可以打印异常堆栈,并在以后根据需要添加特定的catch块。请添加您在问题中看到的异常堆栈。感谢@TuaimiAA,这似乎是正确的方法,我将尝试并反馈。