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