想要将得到的Json数据转化为相应的实体需要使用到gson这个工具包
具体步骤:
1.引入依赖
/**
*build.gradle中引入工具包
*/
implementation 'com.google.code.gson:gson:2.8.5'
2.使用
Gson gson;
ResultBean resultBean = gson.fromJson(JSONTool.stringToJSON(result),ResultBean.class);
这里遇到了一个问题:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object com.google.gson.Gson.fromJson(java.lang.String, java.lang.Class)' on a null object reference
百度了一下是因为返回的json中会有空值 所以要对其进行相应处理:
public class NullStringToEmptyAdapterFactory implements TypeAdapterFactory {
@Override
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
Class<T> rawType = (Class<T>) type.getRawType();
if (rawType != String.class) {
return null;
}
//针对String的处理
return (TypeAdapter<T>) new StringNullAdapter();
}
}
public class StringNullAdapter extends TypeAdapter<String> {
@Override
public String read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
//空的String对象进行赋值
return "";
}
return reader.nextString();
}
@Override
public void write(JsonWriter writer, String value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}
Gson gson = new GsonBuilder()
.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory())
.serializeNulls()
.create();
ResultBean resultBean = gson.fromJson(JSONTool.stringToJSON(result),ResultBean.class);