我用改造.
我有这样的JSON数据:
{ "elements": { "159": { "id": 159,"name": "Alex" },"831": { "id": 831,"name": "Sofia" },"3125": { "id": 3125,"name": "Mark" } } }
无法在我这边配置此JSON的结构.
我想使用改造来处理这些对象(动态地改变它们的名字).
我现在就像那样.
模型:
public class Elements{ public ArrayList<ElementsItem> = new Array<ElementsItem>(); //getters setters public class ElementsItem{ public ArrayList<ElementsItemDetails> = new Array<ElementsItemDetails>(); //getters setters } public class ElementItemDetails{ public Integer id; public String name; //getters setters }}
API:
public interface MyApi { @GET("/file.PHP?method=getElementDetails") public void getDetails(@Query("ids") ArrayList<Integer> ids_list,Callback<Elements> callback); }
以及我尝试处理数据的函数:
public void get_details_for_particular_elements(ArrayList<Integer> ids_list){ Gson gson_gd = new GsonBuilder().registerTypeAdapter( Elements.class,new JsonDeserializer<Elements>() { @Override public Elementsdeserialize(JsonElement je,Type type,JsonDeserializationContext jdc) throws JsonParseException { // TODO Auto-generated method stub Log.d("my_app","Deserialization for Getting Elements Details in progress.."); JsonObject elements= je.getAsJsonObject(); return new Gson().fromJson(elements,Elements.class); } }).create(); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(Constants.URL) .setConverter(new GsonConverter(gson_gd)).build(); MyApi myDetails = restAdapter.create(MyApi.class); myDetails.getDetails(ids_list,new Callback<Elements>() { @Override public void success(Elements e,Response response) { // TODO Auto-generated method stub Log.d("my_app","Success! " + e.getElementsItem().get(0).getElementsItemDetails().get(0).getName()); } @Override public void failure(RetrofitError retrofitError) { // TODO Auto-generated method stub Log.d("my_app","Failure..." + retrofitError); } }); }
我尝试处理名称“Alex”并在LogCat中打印,但我不能 – 应用程序停止.我确信这个命令:
e.getElementsItem().get(0).getElementsItemDetails().get(0).getName()
是错的,但我不知道如何处理名称值的任何其他方式.
当对象名称发生变化时如何表现(在这种情况下,有三个相似的对象被称为依赖于提供的ids列表列表?这里:[156,831,3125]
请帮忙.
解决方法
作为动态生成ElementItemDetails的关键,您应该使用Map来表示结构.
在您的模型类Elements中:
更换
public ArrayList<ElementsItem> = new Array<ElementsItem>();
同
Map<String,ElementItemDetails> elemDetails;
希望这可以帮助.