我的Api回复看起来像这样。
public class Response<T>{
@Expose
@SerializedName("status")
private Integer status;
@Expose
@SerializedName("message")
private String message;
@Expose
@SerializedName("data")
private T data;
//Getters and Setters
}
我的Response类看起来像这样。数据类型根据要求而变化。
Response<ClassA> response = new Gson().fromJson(jsonString, ??);
问题1.如何使用gson解析这个json?
dest.writeInt(status == null ? 0:status);
dest.writeString(message);
??
问题2.我将如何为此类编写Parcelable实现。
.class:after{
content:"";
border:10px solid transparent;
border-top-color:red;
}
答案 0 :(得分:0)
您需要在模型结构中进行一些更改。要这样做..
创建一个BaseDTO,它只是您的Response类,并使用您的ClassA扩展您的BaseDTO。
BaseDto.class
public class BaseDto {
@Expose
@SerializedName("status")
protected Integer status;
@Expose
@SerializedName("message")
protected String message;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
ClassA.class
public class ClassA extends BaseDto implements Parcelable {
String name;
protected ClassA(Parcel in) {
name = in.readString();
status = in.readByte() == 0x00 ? null : in.readInt();
message = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
if (status == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeInt(status);
}
dest.writeString(message);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<ClassA> CREATOR = new Parcelable.Creator<ClassA>() {
@Override
public ClassA createFromParcel(Parcel in) {
return new ClassA(in);
}
@Override
public ClassA[] newArray(int size) {
return new ClassA[size];
}
};
}
使用此网站生成Parcelable类http://www.parcelabler.com/
使用gson解析你只需要将它的类型传递给它..
我写了一个函数来简化这个.. 将它们保存在Util类
中public static <T> String convertObjectToStringJson(T someObject, Type type) {
Gson gson = new Gson();
String strJson = gson.toJson(someObject, type);
return strJson;
}
public static <T> T getObjectFromJson(String json, Type type) {
Gson gson = new Gson();
if (json != null) {
if (json.isEmpty()) {
return null;
}
}
return gson.fromJson(json, type);
}
使用这些功能的例子:
ClassA classA = Util.getObjectFromJson(strJson, new TypeToken<ClassA>() {}.getType());
String jsonClassA = Util.convertObjectToStringJson(objClassA, new TypeToken<ClassA>() {}.getType());
答案 1 :(得分:0)
回答我自己的问题。
问题1:
Response<ClassA> response = new Gson().fromJson(jsonString, new TypeToken<Response<ClassA>>(){}.getType());
问题2:
将课程更改为此。
public class Response<T extends Parcelable>{
@Expose
@SerializedName("status")
private Integer status;
@Expose
@SerializedName("message")
private String message;
@Expose
@SerializedName("data")
private T data;
//Getters and Setters
@Override
public void writeToParcel(Parcel dest, int flags) {
if (data != null) {
dest.writeString(data.getClass().getName());
dest.writeParcelable(data, flags);
} else dest.writeString(null);
dest.writeString(message);
dest.writeInt(status);
}
}
protected Response(Parcel in) {
String className = in.readString();
if (className != null) {
try {
data = in.readParcelable(Class.forName(className).getClassLoader());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
message = in.readString();
status = in.readInt();
}