Java 使用改进和简单XML转换器获取XML数据
我需要从数据库中获取数据。以下是使用Postman时原始数据的外观Java 使用改进和简单XML转换器获取XML数据,java,android,xml,retrofit2,Java,Android,Xml,Retrofit2,我需要从数据库中获取数据。以下是使用Postman时原始数据的外观 <?xml version="1.0" encoding="utf-8"?> <ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.SupermarketAPI.com"> <Pro
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.SupermarketAPI.com">
<Product>
<Itemname>Flake Parsley Seasoning - 0.375 Oz. Plastic Peg Bag</Itemname>
<ItemDescription>Flake Parsley Seasoning - 0.375 Oz. Plastic Peg Bag</ItemDescription>
<ItemCategory>Condiments/Spices & Bake</ItemCategory>
<ItemID>84309</ItemID>
<ItemImage>http://smapistorage.blob.core.windows.net/thumbimages/2/3C07125.jpg</ItemImage>
<AisleNumber>Aisle:N/A</AisleNumber>
</Product>
<Product>
<Itemname>El Guapo Flake Parsley Spice - 0.25 Oz. Plastic Bag</Itemname>
<ItemDescription>El Guapo Flake Parsley Spice - 0.25 Oz. Plastic Bag</ItemDescription>
<ItemCategory>Condiments/Spices & Bake</ItemCategory>
<ItemID>89721</ItemID>
<ItemImage>http://smapistorage.blob.core.windows.net/thumbimages/2/no_image_sm.jpg</ItemImage>
<AisleNumber>Aisle:N/A</AisleNumber>
</Product>
<Product>
<Itemname>Superline Deal Flake Parsley Seasoning - 1.2 Oz Shaker</Itemname>
<ItemDescription>Superline Deal Flake Parsley Seasoning - 1.2 Oz Shaker</ItemDescription>
<ItemCategory>Condiments/Spices & Bake</ItemCategory>
<ItemID>85817</ItemID>
<ItemImage>http://smapistorage.blob.core.windows.net/thumbimages/2/5E59BCF.jpg</ItemImage>
<AisleNumber>Aisle:N/A</AisleNumber>
</Product>
</ArrayOfProduct>
这是改装界面
public interface SuperMarketApiService {
public static final String BASE_URL = "http://www.SupermarketAPI.com/api.asmx/";
@GET("SearchByProductName")
Call<ProductDto> getProduct(
@Query("APIKEY") String key,
@Query("ItemName") String itemName
);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
}
公共接口超级营销服务{
公共静态最终字符串BASE_URL=”http://www.SupermarketAPI.com/api.asmx/";
@获取(“SearchByProductName”)
调用getProduct(
@查询(“APIKEY”)字符串键,
@查询(“ItemName”)字符串ItemName
);
改装改装=新改装.Builder()
.baseUrl(基本URL)
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
}
问题是当我打电话时,我收到了错误信息
org.simpleframework.xml.core.Element异常:元素“Product”在第3行的class Data.ProductDto中没有匹配项
如何更新POJO以将XML ArrayOfProducts正确映射到Java ArrayList of Products
这是我打电话的方式
private void getProducts() {
SuperMarketApiService apiService = SuperMarketApiService.retrofit.create(SuperMarketApiService.class);
Call<ArrayOfProduct> call = apiService.getProduct("jdmdldfdd", "Parsley");
call.enqueue(new Callback<ArrayOfProduct>() {
@Override
public void onResponse(Call<ArrayOfProduct> call, Response<ArrayOfProduct> response) {
ArrayOfProduct products = response.body();
Log.d(LOG_TAG, "Product Count: " + products.getProductDtos().size());
}
@Override
public void onFailure(Call<ArrayOfProduct> call, Throwable t) {
Log.d(LOG_TAG, t.getLocalizedMessage());
}
});
}
private void getProducts(){
SuperMarketApiService=SuperMarketApiService.reformation.create(SuperMarketApiService.class);
Call Call=apiService.getProduct(“jdmdldfdd”、“欧芹”);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
ArrayOfProducts=response.body();
Log.d(Log_标签,“产品计数:+products.getProductDtos().size());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(Log_标记,t.getLocalizedMessage());
}
});
}
我认为您应该将返回的productd更改为
输入getProduct()
通过与xml匹配的类型,该类型作为根元素等待包含多个产品而不仅仅是一个产品的封闭类型。您可以引入
ArrayOfProduct
,这是一个包装类,包含ProductDto
的列表
你可以这样做:
@GET("SearchByProductName")
Call<ArrayOfProduct> getProducts(
@Query("APIKEY") String key,
@Query("ItemName") String itemName
);
@GET(“SearchByProductName”)
呼叫getProducts(
@查询(“APIKEY”)字符串键,
@查询(“ItemName”)字符串ItemName
);
我引入了ArrayofProduct,但仍然得到相同的错误。谢谢你的建议不客气。你也有同样的错误吗?您确定输入xml吗?我添加了代码,显示如何调用问题ProductDto
是类名,但您是否已将其映射到类声明中的Product
xml元素?在显示的代码中,我的印象并非如此。
@GET("SearchByProductName")
Call<ArrayOfProduct> getProducts(
@Query("APIKEY") String key,
@Query("ItemName") String itemName
);