我使用有getter和setter的POJO类。然而,由于这种动态行为,我将被迫使用反序列化部分。我已经实现的代码,以及,但是有任何其他的方法来处理这个。因为,下面粘贴的响应只是实际响应的一小部分(这是大量的,我正在使用POJO getter和setter)
对象 secondaryUser: {
id: 1,
username: "admin",
numberOfFollowers: 1,
displayName: "admin"
}
数组 secondaryUser: [
{
id: 18150,
activityDateTime: "2015-07-20 14:46:02",
user: {
id: 1,
username: "admin",
numberOfFollowers: 1,
displayName: "admin"
}
},
{
id: 18148,
activityDateTime: "2015-07-20 13:35:02",
user: {
id: 3,
username: "USER_1",
numberOfFollowers: 4,
displayName: "USER_1"
}
},
{
id: 18146,
activityDateTime: "2015-07-20 11:29:41",
user: {
id: 2468,
username: "USER_2",
numberOfFollowers: 1,
displayName: "USER_2"
}
}
]
}
我希望这会解决你的问题。
首先,在您的情况下,如果您已声明secondaryUser为对象或数组,将其更改为List<SecondaryUser> secondaryUser
创建反序列化器。
DynamicJsonConverter.java
public class DynamicJsonConverter implements Converter {
private static String fromStream(InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
}
return out.toString();
}
@Override
public Object fromBody(TypedInput typedInput, Type type) throws ConversionException {
try {
InputStream in = typedInput.in(); // convert the typedInput to String
String string = fromStream(in);
in.close(); // we are responsible to close the InputStream after use
return string;
} catch (Exception e) { // a lot may happen here, whatever happens
throw new ConversionException(e); // wrap it into ConversionException so retrofit can process it
}
}
@Override
public TypedOutput toBody(Object object) { // not required
return null;
}
}
Rest适配器类。
BasePathAdapterForDynamicJSONKeys.java
public class BasePathAdapterForDynamicJSONKeys {
private static RetroFitInterface topRecommendationsInterface;
public static RetroFitInterface getCommonPathInterface() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(baseURL)
.setConverter(new DynamicJsonConverter())
.build();
topRecommendationsInterface = restAdapter.create(RetroFitInterface.class);
return topRecommendationsInterface;
}
同时,使用回调作为Callback<String>()
而不是Callback<YourObject>()
现在,在你的activity/fragment中,在retrofit回调的success方法中,使用this
@Override
public void success(String myData, Response response) {
JSONObject mainObject = null;
mainObject = new JSONObject(myData);
//You can also use JSONObject, depends on what type the response is
JSONArray myJsonArray = mainObject.getJSONArray("yourkey");
最后,将其转储到数组列表中。(这基本上是JSON数组到arraylist的转换:))
ArrayList<MyObj> menuDetails = new Gson().fromJson(myJsonArray.toString(), new TypeToken<List<MyObj>>(){}.getType());