【问题标题】:Android Parcelable JsonArray in Side JsonObject侧 JsonObject 中的 Android Parcelable JsonArray
【发布时间】:2015-10-12 12:05:45
【问题描述】:

当我尝试使用 GSON 处理这个 json 数据时。我无法在 JsonObject 一侧获取 JsonArray。以下是我的代码,每个建议都会得到应用。

来自服务器的 JSON 数据:

{
"GetJobDetails": {
    "MaxAmount": 0,
    "CreatorId": 1,
    "JobImages": [
        {
            "ImagePath": "http://192.168.1.108:8088/Uploads/6e660c0c-4a2b- 42dc-ad97-82cc3efe87a0.jpg",
            "JobImageId": 1
        },
        {
            "ImagePath": "http://192.168.1.108:8088/Uploads/ccf1087d-9f7e-4c21-bc61-8aa3fd924e05.jpg",
            "JobImageId": 2
        },
        {
            "ImagePath": "http://192.168.1.108:8088/Uploads/4333e8b6-0079-457f-a225-fd7900ea81b1.jpg",
            "JobImageId": 3
        }
    ],
  }
 }

在活动中:

    Gson gson = new Gson();
    String response = new String(mresponce);
    JobDetails jobDetails= gson.fromJson(response,    JobDetails .class);

    Log.e("JobDetails ",""+jobDetails.getJobImagesList());

即使我的数据中有图像列表,此日志也始终打印为空。

模型类:

public class JobDetails implements Parcelable {

private int MaxAmount;
private int CreatorId;
private List<JobImage> JobImages;

public JobDetails() {

}

public JobDetails(Parcel parcel) {
    this.MaxAmount = parcel.readInt();
    this.CreatorId= parcel.readInt();
    this.JobImages = new ArrayList<JobImage>();
    parcel.readTypedList(JobImages, JobImage.CREATOR);

}

// Parcelable
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(this.MaxAmount);
    dest.writeInt(this.CreatorId);
    dest.writeList(this.JobImages);
    // TODO: Not Parceling AddressList
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public JobDetails createFromParcel(Parcel in) {
        return new JobDetails(in);
    }
    public JobDetails[] newArray(int size) {
        return new JobDetails[size];
    }
};

public List<JobImage> getJobImagesList() {
    return JobImages;
}

public void setJobImagesList(List<JobImage> jobImages) {
    JobImages = jobImages;
}
public int getMaxAmount() {
    return MaxAmount;
}

public void setMaxAmount(int maxAmount) {
    MaxAmount= maxAmount;
  }
 }

JOBIMAGE 的另一个模型类:

public class JobImage implements Parcelable {

private String ImagePath;
private int JobImageId;
JobImage(){

}
public JobImage(Parcel in) {
    this.ImagePath = in.readString();
    this.JobImageId = in.readInt();
}
// Parcelable
@Override
public int describeContents() {
    return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.ImagePath);
    dest.writeInt(this.JobImageId);
    // TODO: Not Parceling AddressList
}
public static final Creator CREATOR = new Creator() {
    public JobImage createFromParcel(Parcel in) {
        return new JobImage(in);
    }
    public JobImage[] newArray(int size) {
        return new JobImage[size];
    }
};

public String getImagePath() {
    return ImagePath;
}

public void setImagePath(String imagePath) {
    ImagePath = imagePath;
}

public int getJobImageId() {
    return JobImageId;
}

 public void setJobImageId(int jobImageId) {
    JobImageId = jobImageId;
 }
 }

请帮我找出我在这方面做错了什么:

【问题讨论】:

  • 什么是GetJobDetails类?
  • 感谢您的回复。编辑了我的帖子。它的 JobDetails Bean 类

标签: java android json gson parcelable


【解决方案1】:

您的顶级 JSON 对象不是JobDetails 对象,它是具有JobDetails 成员名称GetJobDetails 的对象。您需要处理这个级别的 JSON。您可以使用自定义TypeAdapter 来完成它,或者更简单,只需创建一个容器对象并反序列化它。

class JobDetailContainer {
   private JobDetails GetJobDetails;
   public JobDetails getJobDetails() { 
       return GetJobDetails;
   }
}

然后使用 --

Gson gson = new Gson();
String response = new String(mresponce);
GetJobDetails getJobDetails= gson.fromJson(response, GetJobDetails.class);

Log.e("JobDetails ",""+getJobDetails.getJobDetails().getJobImagesList());

【讨论】:

    【解决方案2】:

    同意@iagreen ...我也应该处理顶级json对象..这是我在做了一些研发后所做的

      public class GetJobDetails {
                public GetJobDetailsResult getGetJobDetailsResult() {
                    return GetJobDetailsResult;
                }
               public void setGetJobDetailsResult(GetJobDetailsResult GetJobDetailsResult) {
                    this.GetJobDetailsResult = GetJobDetailsResult;
                }
       }
    

    对于内部 Json:

      public class GetJobDetailsResult {
                private Integer MaxAmount;
                private Integer CreatorTotJobPosted;
                private List<JobImage> JobImages = new ArrayList<JobImage>();
                public Integer getMaxAmount() {
                    return MaxAmount;
                }
                public void setMaxAmount(Integer MaxAmount) {
                    this.MaxAmount = MaxAmount;
                }
                public Integer getCreatorTotJobPosted() {
                    return CreatorTotJobPosted;
                }
                public void setCreatorTotJobPosted(Integer CreatorTotJobPosted) {
                    this.CreatorTotJobPosted = CreatorTotJobPosted;
                }
                public List<JobImage> getJobImages() {
                    return JobImages;
                }
                public void setJobImages(List<JobImage> JobImages) {
                    this.JobImages = JobImages;
                }
            }
    

    终于要留住JobImages了

      public class JobImage {
    
            private String ImagePath;
            private Integer JobImageId;
    
            public String getImagePath() {
                return ImagePath;
            }
    
            public void setImagePath(String ImagePath) {
                this.ImagePath = ImagePath;
            }
    
            public Integer getJobImageId() {
                return JobImageId;
            }
    
            public void setJobImageId(Integer JobImageId) {
                this.JobImageId = JobImageId;
            }
    
        }
    

    最后一步:

        Gson gson = new Gson();
        String response = new String(jsonObjectresponce.toString());
        GetJobDetails getJobDetails = gson.fromJson(response,    GetJobDetails.class);
        GetJobDetailsResult result = getJobDetails.getGetJobDetailsResult();
        // now result object contains my json data. 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 2021-09-28
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多