I hope this will solve your problem.
First of all, in your case, if you have declared secondaryUser as object or Array, change it to List<SecondaryUser> secondaryUser
Create a deserializer.
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;
}
}
Your Rest Adapter class.
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;
}
Also, use the callback as Callback<String>() instead of Callback<YourObject>()
Now, inside the your activity/fragment, inside the success method of retrofit callback, use 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");
And finally, dump this inside your arraylist.(This is basically conversion of JSON array to arraylist :))
ArrayList<MyObj> menuDetails = new Gson().fromJson(myJsonArray.toString(), new TypeToken<List<MyObj>>(){}.getType());