【发布时间】:2017-07-17 10:22:50
【问题描述】:
我使用 retofit 从 Api 获取数据,这是我的 ApiClient 类
public class ApiClient {
private static final String BASE_URL = BuildConfig.BASE_URL;
private static Retrofit retrofit = null;
public static Retrofit getClient() {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(120, TimeUnit.SECONDS)
.connectTimeout(120, TimeUnit.SECONDS)
.build();
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().serializeNulls().create()))
.build();
}
return retrofit;
}
}
我使用GsonConverterFactory.create(new GsonBuilder().serializeNulls().create()) 序列化空键
这是我的 ApiInterface 方法
@FormUrlEncoded
@POST("data")
Call<MyCustomObject> getData(@Field("data") String request);
所以我将数据绑定到MyCustomObject,它可以如下
public class MyCustomObject{
@SerializedName("result")
@Expose
private Result result;
@SerializedName("data")
@Expose
private Data Data;
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result= result;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data= data;
}
}
所以 Data 和 Result 对象可能有一些属性返回 null 并且它包含很多属性,当我在我的活动中使用它们时,它会通过空指针异常和应用程序崩溃
那么是否存在任何方法让我不必检查这些对象中的每个参数是否为空?
更新 1
关于更多信息,假设类数据如下
public class Data {
@SerializedName("type")
@Expose
private String type;
@SerializedName("properties")
@Expose
private String properties;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getProperties() {
return properties;
}
public void setProperties(String properties) {
this.properties = properties;
}
}
所以当我使用 getData().getType() 时,它可能会通过基于 api 的返回的空指针异常
【问题讨论】:
标签: java android gson retrofit2