2015-12-02 113 views
0

我刚开始使用Retrofit。我正在开发一个使用SimpleXML的项目。我试图从该网站获取http://www.supermarketapi.com XML,但我得到以下错误:Android - 如何使用Retrofit SimpleXML解析xml?

java.lang.IllegalArgumentException: Unable to create call adapter for rx.Observable<com.crosser.brian.shakennotstirred.Models.StoreResultModel> for method SupermarketProvider.getStoreSearchResults 

的XML我想获取的样子:下面我从我的项目提供摘录 http://www.supermarketapi.com/api.asmx/StoresByZip

。不知道我做错了什么。

StoreResultModel文件:

public class StoreResultModel { 

    @Root(name = "ArrayOfStore") 
    ArrayList<StoreModel> searchStoresResults; 

    public ArrayList<StoreModel> getSearchStoresResults(){ 
     return searchStoresResults; 
    } 
} 

StoreModel文件:

@Root(name = "Store") 
public class StoreModel { 

    @Element(name ="Storename") 
    public String storename; 

    @Element(name ="Address") 
    public String address; 

    @Element(name ="City") 
    public String city; 

    @Element(name ="State") 
    public String state; 

    @Element(name ="Zip") 
    public String zip; 

    @Element(name ="Phone") 
    public String phone; 

    @Element(name ="StoreId") 
    public int storeId; 



    public int getStoreId() { 
     return storeId; 
    } 

    public String getStorename(){ 
     return storename; 
    } 

    public String getAddress(){ 
     return address; 
    } 

    public String getCity(){ 
     return city; 
    } 

    public String getState(){ return state; } 

    public String getZip() { return zip; } 

    public String getPhone() { return phone; } 

    public void setStoreId(int storeID) { this.storeId = storeId; } 

    public void setStorename(String storename) { this.storename = storename; } 

    public void setAddress(String address) { this.address = address; } 

    public void setCity(String city) { this.city = city; } 

    public void setState(String state) { this.state = state; } 

    public void setZip(String zip) { this.zip = zip; } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 


} 

SuperMarketAPIClient文件:

Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(AppDefines.SUPERMARKET_API_URL) 
      .addConverterFactory(SimpleXmlConverterFactory.create()) 
      .build(); 

我的API调用:

SupermarketAPIClient.getSupermarketProvider() 
        .getStoreSearchResults(AppDefines.SUPERMARKET_API_KEY, ZipCode) 
        .subscribeOn(Schedulers.newThread()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(new Subscriber<StoreResultModel>() { 

SupermarketProvider文件:

@GET("/api.asmx/StoresByZip") 
Observable<StoreResultModel> getStoreSearchResults(@Query("APIKEY") String key, 
                @Query("ZipCode") String zip); 

AppDefines文件:

public static final String SUPERMARKET_API_URL = "http://www.SupermarketAPI.com"; 
public static final String SUPERMARKET_API_KEY = "**********"; 

在此先感谢!

回答

0

添加到您的build.gradledependencies下):

compile "com.squareup.retrofit:adapter-rxjava:$project.retrofitVersion" 

(更换$project.retrofitVersion与您正在使用的版本,想必2.0.0-β1或2.0.0-β2)。

这行添加到您Retrofit.Builder

.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 

如果我没有记错你的错误无关,与XML,但一个事实,即改造2现在需要的RxJava适配器能够返回Observable s而不是Call s。

+0

我已经在我的build.grade @ david.mihola – Zach

+0

已经有这种依赖关系,那么你如何将这行添加到你的'Retrofit.Builder'? –

+0

添加了该行,它有帮助!谢谢!现在我收到错误:java.lang.RuntimeException:org.simpleframework.xml.core.ElementException:Element'Store'在类中没有匹配...在第3行的Models.StoreResultModel @ david.mihola – Zach