我想知道为什么在使用Retrofit执行RESTful服务时,我会收到一个错误的请求错误。
错误:HTTP / 1.1 400错误请求
这是我的两个类:
RetrofitInterface:
public class RetrofitInterface {
private static StockApiInterface sStockService;
public static StockApiInterface getStockApiClient() {
if (sStockService == null) {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://query.yahooapis.com/v1/public")
.build();
sStockService = restAdapter.create(StockApiInterface.class);
}
return sStockService;
}
public interface StockApiInterface {
@GET("/yql")
void listQuotes(@Query("q") String query,Callback<Stock> stockInfo);
}
}
在MainActivity中的Asyntask
public class extraThread extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
RetrofitInterface.getStockApiClient().listQuotes("select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(\"AIB.IR\")%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=", new Callback<Stock>() {
@Override
public void failure(RetrofitError arg0) {
// TODO Auto-generated method stub
arg0.printStackTrace();
}
@Override
public void success(Stock arg0, Response arg1) {
// TODO Auto-generated method stub
}
});
}
}
结果总是失败。最初我认为问题在于Retrofit内置的gson转换器无法将响应转换为股票对象,因为我只收到了一个“Retrofit.retrofiterror”响应。然而,“错误请求”的响应让我认为问题在于API的URL。 这是我期望的响应URL:
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AIB.IR%22)%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=
请问我的代码是否正确构建了它?可能的一个问题是我在查询中使用了引号转义符。也许这会导致问题?
以防万一,我将发布我的股票对象。我使用在线POJO转换器编写了它。
public class Stock {
@Expose
private Query query;
public Query getQuery() {
return query;
}
public void setQuery(Query query) {
this.query = query;
}
}
任何关于此事的帮助将不胜感激。