Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用改进和简单XML转换器获取XML数据_Java_Android_Xml_Retrofit2 - Fatal编程技术网

Java 使用改进和简单XML转换器获取XML数据

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

我需要从数据库中获取数据。以下是使用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">
    <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 &amp; 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 &amp; 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 &amp; 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
    );