我是从事Android改造工作的新手。我使用IIS创建服务,并在其中加载JSON,如下所示:
[{"Id":1,"Name":"Product1","Price":9.99},
{"Id":2,"Name":"Product2","Price":19.99},
{"Id":3,"Name":"Product3","Price":29.99},
{"Id":4,"Name":"Product4","Price":39.99},
{"Id":5,"Name":"Product5","Price":49.99},
...]
我可以使用改造指令@GET带来一些特定数据。但是,当我尝试实现@QUERY或@HEADER时,收到的结果不是我期望的。例如:
我有我的界面:
public interface ServiceProduct {
@GET("api/Product/{id}")
Call<ManagerProduct> getFindShop(@Path(value="id") String productID);
@GET("api/Product")
Call<ManagerProduct> getHeader(@Header("Name") String header);
}
我的ManagerProduct.java类是这样的:
public class ManagerProduct {
@SerializedName("Id")
@Expose
private Integer id;
@SerializedName("Name")
@Expose
private String name;
@SerializedName("Price")
@Expose
private Double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
我给服务打电话的方式是改型:
private void LoadProduct() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
ServiceProduct serviceProduct = retrofit.create(ServiceProduct.class);
Call<ManagerProduct> listProduct = serviceProduct.getHeader("Product2");
listProduct.enqueue(new Callback<ManagerProduct>() {
@Override
public void onResponse(Call<ManagerProduct> call,
Response<ManagerProduct> response) {
if (response.isSuccessful()) {
listManagerProduct=response.body();
for (int i=0;i<listManagerProduct.size();i++){
System.out.println(listManagerProduct.get(i).getPrice());
}
}
}
@Override
public void onFailure(Call<List<ManagerShop>> call, Throwable t) {
}
});
}
我得到的结果是19.99,但是我却收到9.99,19.99,29.99,39.99,49.99。
我做错了什么?
作为其他信息,在搜索信息时,我发现了这个问题: retrofit 2 @path Vs @query
答案:
请考虑以下网址:
www.app.net/api/searchtypes/862189/filters?Type=6&SearchText=School
现在这是电话:
@GET("/api/searchtypes/{Id}/filters")
Call<FilterResponse> getFilterList(@Path("Id") long customerId,
@Query("Type") String responseType,
@Query("SearchText") String searchText);
所以我们有:
www.app.net/api/searchtypes/{Path}/filters?Type={Query}&SearchText={Query}
之后是什么?通常是查询。
如果我尝试编写URL并直接在浏览器中查询:
http://server/api/Product?Name=Product2
我收到了完整的JSON。因此,我不知道我是否实施了错误的服务。我完全迷路了,我读了很多书,但我听不懂。
有什么帮助吗?