首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓:如何使用Retrofit从List<Class>获取对象属性

安卓:如何使用Retrofit从List<Class>获取对象属性
EN

Stack Overflow用户
提问于 2018-07-17 04:12:30
回答 1查看 911关注 0票数 0

非常感谢,请帮助我解决这个问题。我想通过REST API从JSON对象获取一些数据。

以下是json的演示:

{
"itemList": [
    {
        "name": "AF1_AC",
        "value": false,
        "awid": "1",
        "sys": {
            "cts": "2018-07-16T14:51:34.166Z",
            "mts": "2018-07-16T17:49:40.206Z",
            "rev": 775
        },
        "id": "5b4cb0f66a4c333860d64d79"
    },
    {
        "name": "ST1_RE",
        "value": 27.11,
        "awid": "1",
        "sys": {
            "cts": "2018-07-15T14:53:05.228Z",
            "mts": "2018-07-16T17:49:40.320Z",
            "rev": 4124
        }
    }
    ]
}

这是我的界面:

public interface FarmAPI {

String BASE_URL = "http://10.0.2.2:6221/";

@GET("smartfarm/0-1/listFarmObjectValue") Call<ItemList> getItemList();

class Factory {
    private static FarmAPI service;

    public static FarmAPI getInstance() {
        if (service == null) {
            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder().
                    addInterceptor(interceptor)
                    .build();
            Retrofit retrofit = new Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl(BASE_URL)
                    .client(client).build();
            service = retrofit.create(FarmAPI.class);
            return service;
        } else {
            return service;
        }
    }
}

}

下面是jsonschema2pojo生成的类:

public class ListFarmObjectValue {

@SerializedName("itemList")
@Expose
private List<ItemList> itemList = null;

public List<ItemList> getItemList() {
    return itemList;
}

public void setItemList(List<ItemList> itemList) {
    this.itemList = itemList;
}

}

第二个是:

public class ItemList {

@SerializedName("name")
@Expose
private String name;
@SerializedName("value")
@Expose
private double value;
@SerializedName("awid")
@Expose
private String awid;

@SerializedName("id")
@Expose
private String id;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public double getValue() {
    return value;
}

public void setValue(double value) {
    this.value = value;
}

public String getAwid() {
    return awid;
}

public void setAwid(String awid) {
    this.awid = awid;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

}

现在我希望从object获取值,其中TextView = ST1_RE并将值设置为特定名称。在方法onCreate中:

FarmAPI.Factory.getInstance().getItemList().enqueue(new Callback<ItemList>() {
        @Override
        public void onResponse(Call<ItemList> call, Response<ItemList> response) {
            if (response.body().getName().equals("ST1_RE")) {
                realTemperature.setText(response.body().getValue() + "");
            }
        }

        @Override
        public void onFailure(Call<ItemList> call, Throwable t) {
            t.printStackTrace();
        }
    });

但它不起作用:(你能告诉我在这种情况下我该怎么做吗?或者不需要通过jsonschema2pojo生成类,如果这样更好的话…?我看到了一些例子,但它对我来说是新的类别,我不理解它。我也不想改变FarmAPI接口,因为我在其他情况下也会用到它。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 05:47:22

1)更改API调用的预期类型

@GET("smartfarm/0-1/listFarmObjectValue") Call<ItemList> getItemList();

@GET("smartfarm/0-1/listFarmObjectValue") Call< ListFarmObjectValue > getItemList();

2)遍历ItemList对象列表以查找名称为'ST1_RE‘的对象

FarmAPI.Factory.getInstance().getItemList().enqueue(new Callback<ListFarmObjectValue>() { @Override public void onResponse(Call<ListFarmObjectValue> call, Response<ListFarmObjectValue> response) { ListFarmObjectValue value = response.body(); for(ItemList item : value.getItemList()){ if (item.getName().equals("ST1_RE")) { realTemperature.setText(response.body().getValue() + ""); break; } } } });

编辑:我刚刚看到你的消息,你不想改变API调用。在这种情况下,只需在具有我提到的新返回类型的同一类中创建一个新方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51369456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档