Jac*_*ynx 8 android json object retrofit
我用改造.
我有这样的JSON数据:
{
"elements": {
"159": {
"id": 159,
"name": "Alex"
},
"831": {
"id": 831,
"name": "Sofia"
},
"3125": {
"id": 3125,
"name": "Mark"
}
}
}
Run Code Online (Sandbox Code Playgroud)
无法在我这边配置此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
}}
Run Code Online (Sandbox Code Playgroud)
API:
public interface MyApi {
@GET("/file.php?method=getElementDetails")
public void getDetails(@Query("ids") ArrayList<Integer> ids_list, Callback<Elements> callback);
}
Run Code Online (Sandbox Code Playgroud)
以及我尝试处理数据的函数:
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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我尝试处理名称"Alex"并在LogCat中打印,但我不能 - 应用程序停止.我确信这个命令:
e.getElementsItem().get(0).getElementsItemDetails().get(0).getName()
Run Code Online (Sandbox Code Playgroud)
是错的,但我不知道如何处理名称值的任何其他方式.
当对象名称发生变化时如何表现(在这种情况下,有三个相似的对象被称为依赖于ids_list提供的ID列表?这里:[156,831,3125]
请帮忙.
小智 11
作为动态生成ElementItemDetails的关键,您应该使用Map来表示结构.
在您的模型类Elements中:
更换
public ArrayList<ElementsItem> = new Array<ElementsItem>();
Run Code Online (Sandbox Code Playgroud)
同
Map<String, ElementItemDetails> elemDetails;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
2058 次 |
| 最近记录: |