Java 生成请求时出现Android改装错误
我想知道是否有人能告诉我,当我尝试使用改造来执行RESTfull服务时,为什么会出现错误的请求 错误:HTTP/1.1 400错误请求 以下是我的两门课: 改装接口:Java 生成请求时出现Android改装错误,java,android,rest,retrofit,Java,Android,Rest,Retrofit,我想知道是否有人能告诉我,当我尝试使用改造来执行RESTfull服务时,为什么会出现错误的请求 错误:HTTP/1.1 400错误请求 以下是我的两门课: 改装接口: public class RetrofitInterface { private static StockApiInterface sStockService; public static StockApiInterface getStockApiClient() { if (sStockServ
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);
}
}
在此方面的任何帮助都将不胜感激。您正在尝试使用一个查询字符串参数,而不是多个查询字符串参数。这不起作用,请参阅。 此外,无需对查询内容进行编码,改型将自动完成(请参阅): 默认情况下,参数值是URL编码的。指定encodeValue=false以更改此行为
将日志记录添加到改造中,以查看其提出的确切请求。您可以通过将.setLogLevel(RestAdapter.LogLevel.FULL)添加到您的RestAdapter中来完成此操作。此外,由于您在请求中使用回调,因此无需将其放入AsyncTask中。不要转义YQL查询字符串。像使用原始SQL字符串一样使用它。好的,我正在请求api并获得json响应。。但是,将其转换为对象会让我感到困惑,因为json太冗长了。*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AIB.IR%22%2C%22BIR.IR%22)%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=这是api。我只需要在url中添加一个参数来返回“result”数组就行了吗?当然,只要删除“&diagnostics=true”,信息就会更少。您可以从JSON响应中只映射所需的字段。只需创建具有相同名称的字段,并在类中为其创建getter/setter
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
}
});
}
}
public class Stock {
@Expose
private Query query;
public Query getQuery() {
return query;
}
public void setQuery(Query query) {
this.query = query;
}
}