【发布时间】:2020-07-28 14:51:11
【问题描述】:
我有一个名为“user”的类,它有一个属性是一个名为“jobs”的自定义类的列表,我将用户转换为 json 并保存在文件系统中,现在我的问题是我使用 Gson 的作业保存它,但我有那个错误:
java.lang.IllegalStateException:应为 BEGIN_ARRAY,但为 BEGIN_OBJECT
这是用户类,我使用 userToJson 方法将其转换为 json,并使用带有 json 对象的构造函数对其进行反序列化
public class User implements Serializable {
private String FirstName;
private String LastName;
private String Email;
private String Phone;
private String Town;
private ArrayList<Job> Jobs;
private Location location;
private Boolean hasBusiness;
public User(){
Jobs = new ArrayList<>();
}
public User(JSONObject userJson) throws JSONException {
FirstName = userJson.getString(Constants.FILE_FIRST_NAME);
LastName = userJson.getString(Constants.FILE_LAST_NAME);
Email = userJson.getString(Constants.FILE_EMAIL);
Phone = userJson.getString(Constants.FILE_PHONE);
Town = userJson.getString(Constants.FILE_TOWN);
String locationJSON = userJson.getString(Constants.FILE_LOCATION);
location = new Gson().fromJson(locationJSON,Location.class);
hasBusiness = userJson.getBoolean(Constants.FILE_HAS_BUSINESS);
Type type = new TypeToken<List<Job>>(){}.getType();
String jobJson= userJson.get(Constants.FILE_JOBS).toString();
Jobs = new Gson().fromJson(jobJson,type);
}
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 getEmail() {
return Email;
}
public void setEmail(String email) {
Email = email;
}
public String getPhone() {
return Phone;
}
public void setPhone(String phone) {
Phone = phone;
}
public String getTown() {
return Town;
}
public void setTown(String town) {
Town = town;
}
public Location getLocation() {
return location;
}
public void setLocation(Location location) {
this.location = location;
}
public void setHasBusiness(Boolean hasBusiness) {
this.hasBusiness = hasBusiness;
}
public Boolean getHasBusiness() {
return hasBusiness;
}
public ArrayList<Job> getJobs() {
return Jobs;
}
public void setJobs(ArrayList<Job> jobs) {
Jobs = jobs;
}
public JSONObject userToJson() throws JSONException{
JSONObject jo = new JSONObject();
jo.put(Constants.FILE_FIRST_NAME,this.FirstName);
jo.put(Constants.FILE_LAST_NAME,this.LastName);
jo.put(Constants.FILE_TOWN,this.Town);
jo.put(Constants.FILE_PHONE,this.Phone);
jo.put(Constants.FILE_EMAIL,this.Email);
jo.put(Constants.FILE_LOCATION,new Gson().toJson(location));
jo.put(Constants.FILE_HAS_BUSINESS,hasBusiness);
JSONArray jsonArray = new JSONArray();
for(Job j : this.Jobs){
jsonArray.put(j);
}
Log.d("JobsJobs",new Gson().toJson(jsonArray));
jo.put(Constants.FILE_JOBS,new Gson().toJson(jsonArray));
return jo;
}
}
现在作业字符串如下(它是空的),但它是关于我认为的结构
{"值":[]}
【问题讨论】: