【发布时间】:2016-03-07 08:51:00
【问题描述】:
我刚开始使用 Retrofit。我正在开发一个使用 SimpleXML 的项目。我正在尝试从站点 http://www.supermarketapi.com 获取 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 = "**********";
提前致谢!
【问题讨论】:
标签: android api xml-parsing retrofit rx-android