您需要编写一个自定义反序列化器,然后对其进行循环并获取hasmap的值。
自定义反序列化器:-
public class UserDetailsDeserializer implements JsonDeserializer<AllUserDetailsKeyModel> {
@Override public AllUserDetailsKeyModel deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
final JsonObject jsonObject = json.getAsJsonObject();
Gson gson = new Gson();
Type AllUserDetailsResponseModel =
new TypeToken<HashMap<String, AllUserDetailsResponseModel>>(){}.getType();
HashMap<String, AllUserDetailsResponseModel> user =
gson.fromJson(jsonObject, AllUserDetailsResponseModel);
AllUserDetailsKeyModel result = new AllUserDetailsKeyModel();
result.setResult(user);
return result;
}
}
注释中的代码是我的对象模型,您应该用模型类替换AllUserDetailsKeyModel,并将其添加到其余客户端,如下所示:-
private Converter.Factory createGsonConverter() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(AllUserDetailsKeyModel.class, new UserDetailsDeserializer());
Gson gson = gsonBuilder.create();
return GsonConverterFactory.create(gson);
}
这是改装的自定义转换器。
在您的onResponse中,您仅循环使用hasmaps并通过键获取值,而我的模型类如下所示:-
public class AllUserDetailsKeyModel {
private Map<String, AllUserDetailsResponseModel> result;
public Map<String, AllUserDetailsResponseModel> getResult() {
return result;
}
public void setResult(Map<String, AllUserDetailsResponseModel> result) {
this.result = result;
}
}
可能您需要提供一个Type T,其中T是您的数据类型,而我的模型仅由一个hashmap以及为此的getter和setter组成。
最后将“自定义转换器”设置为如下所示: .addConverterFactory(createGsonConverter())
让我知道是否需要更多说明。