【发布时间】:2017-11-10 17:30:04
【问题描述】:
我正在开发一个 Android 应用程序,我有一个基本的 Customer 类,它有一个国籍数据成员,而该成员又是另一个公共类。当我实例化一个新客户时,国籍和出生日期成员(非原始数据类型)都没有设置(调用他们的 getter 会导致空引用异常)。
顺便说一句,我使用的是 Android Studio,并且我正在通过一个 JSON 包装器创建一个新的 Customer 实例,该包装器接收来自 RESTFUL Web 服务调用的数据。
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 块中打印该异常,以便可以跟踪任何错误
-
idownvotedbecau.se/nodebugging --- What is a debugger and how can it help me diagnose problems? --- “我在这里遗漏了什么?” 调试您的代码以查看发生了什么。或者,如果您需要帮助,请向我们展示 JSON 文本。
-
JSON 中有什么?我不确定您要在这里做什么,但请确保您没有尝试从中获取值的空对象
-
返回 JSON : { "Customer": { "BirthDate": "/Date(551217600000+0400)/", "EmailAddress": null, "FirstName": "Someone", "Gender": 0,“Id”:1,“LastName”:“某人”,“MobileNumber”:“123456789”,“国籍”:{“Id”:157,“NationalityAr”:“Some Nat.”,“NationalityEn”:“一些纳特。” }, "OfficeNumber": "123456789", } }
标签: java android class object instantiation