android – Retrofit:处理动态更改其名称的JSON对象

前端之家收集整理的这篇文章主要介绍了android – Retrofit:处理动态更改其名称的JSON对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我用改造.

我有这样的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;

希望这可以帮助.

猜你在找的Android相关文章