Android 改装2.0返回的URL不正确
我正在尝试使用改型2.0构建我的URL。问题是它正在返回此URL:Android 改装2.0返回的URL不正确,android,retrofit,retrofit2,Android,Retrofit,Retrofit2,我正在尝试使用改型2.0构建我的URL。问题是它正在返回此URL: http://query.yahooapis.com/v1/public/yql?&q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)&format=json%26diagnostics%3Dtrue%26env%3Dstore%253A%252F%252Fdatatables.org%252Falltab
http://query.yahooapis.com/v1/public/yql?&q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)&format=json%26diagnostics%3Dtrue%26env%3Dstore%253A%252F%252Fdatatables.org%252Falltableswithkeys%26callback%3D
我希望它返回此URL:
https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
有人能告诉我如何解决这个问题吗
以下是返回URL的代码:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
mQuoteAdapter = new QuoteAdapter(items);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.question_list);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(mQuoteAdapter);
StockApiServiceInterface stockApiServiceInterface = retrofit.create(StockApiServiceInterface.class);
stockApiServiceInterface.listQuotes(
"select * from yahoo.finance.quotes where symbol in (\"YHOO\")",
"json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=")
.enqueue(new Callback<ResultWrapper>() {
@Override
public void onResponse(Response<ResultWrapper> response) {
response.body().getQuery().getResults().getQuote().getAsk();
}
@Override
public void onFailure(Throwable t) {
Log.e("listQuotes threw: ", t.getMessage());
}
});
reformation-reformation=new-reformation.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
mQuoteAdapter=新的QuoteAdapter(项目);
RecyclerView RecyclerView=(RecyclerView)findViewById(R.id.question_列表);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
setAdapter(mQuoteAdapter);
StockApiServiceInterface StockApiServiceInterface=改装.create(StockApiServiceInterface.class);
stockApiServiceInterface.listQuotes(
“从yahoo.finance.quotes中选择*符号(\“YHOO\”)”,
“json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=”)
.enqueue(新的回调函数(){
@凌驾
公共响应(响应){
response.body().getQuery().getResults().getQuote().getAsk();
}
@凌驾
失效时的公共无效(可丢弃的t){
Log.e(“listQuotes:,t.getMessage());
}
});
这是我的服务:
public final class StockApiService {
public interface StockApiServiceInterface {
@GET("v1/public/yql?")
Call<ResultWrapper> listQuotes(
@Query("q") String query,
@Query("format") String env
);
}
}
公共最终类服务{
公共接口StockApiServiceInterface{
@获取(“v1/public/yql?”)
调用listQuotes(
@查询(“q”)字符串查询,
@查询(“格式”)字符串环境
);
}
}
从您的请求URL中删除问号,如下所示:
@GET("v1/public/yql")
@Query("q") String query,
@Query("format") String format,
@Query("diagnostics") boolean diagnostics,
@Query("env") String enviroment,
@Query("callback") boolean callback
并将发送到此处的参数分开:
"json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=")
进入查询项。
您的方法应该如下所示:
@GET("v1/public/yql")
@Query("q") String query,
@Query("format") String format,
@Query("diagnostics") boolean diagnostics,
@Query("env") String enviroment,
@Query("callback") boolean callback
从您的请求URL中删除问号,如下所示:
@GET("v1/public/yql")
@Query("q") String query,
@Query("format") String format,
@Query("diagnostics") boolean diagnostics,
@Query("env") String enviroment,
@Query("callback") boolean callback
并将发送到此处的参数分开:
"json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=")
进入查询项。
您的方法应该如下所示:
@GET("v1/public/yql")
@Query("q") String query,
@Query("format") String format,
@Query("diagnostics") boolean diagnostics,
@Query("env") String enviroment,
@Query("callback") boolean callback
与Ian略有不同,简化了一点:
public final class StockApiService {
public interface StockApiServiceInterface {
@GET("v1/public/yql?format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys")
Call<ResultWrapper> listQuotes(
@Query("q") String query,
@Query("diagnostics") boolean diagostics
);
}
}
公共最终类服务{
公共接口StockApiServiceInterface{
@获取(“v1/public/yql?format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys”)
调用listQuotes(
@查询(“q”)字符串查询,
@查询(“诊断”)布尔诊断学
);
}
}
方法注释中可以包含不变的查询字符串参数,而改型应该将它们合并在一起。另外,我删除了callback
参数,因为这是一个用于名为JSONP的网站的东西,与Android应用程序无关
您实际遇到的问题是,您正在为Reformation提供一个预合成的部分查询字符串,并要求它为您编码。改型不知道它是一个预合成的查询字符串,所以它做了它应该做的事情:将其视为查询字符串参数的值,并对其进行URL编码@Ian完全正确,您需要将它们分开。与Ian相比有一些细微的变化,简化了一点:
public final class StockApiService {
public interface StockApiServiceInterface {
@GET("v1/public/yql?format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys")
Call<ResultWrapper> listQuotes(
@Query("q") String query,
@Query("diagnostics") boolean diagostics
);
}
}
公共最终类服务{
公共接口StockApiServiceInterface{
@获取(“v1/public/yql?format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys”)
调用listQuotes(
@查询(“q”)字符串查询,
@查询(“诊断”)布尔诊断学
);
}
}
方法注释中可以包含不变的查询字符串参数,而改型应该将它们合并在一起。另外,我删除了callback
参数,因为这是一个用于名为JSONP的网站的东西,与Android应用程序无关
您实际遇到的问题是,您正在为Reformation提供一个预合成的部分查询字符串,并要求它为您编码。改型不知道它是一个预合成的查询字符串,所以它做了它应该做的事情:将其视为查询字符串参数的值,并对其进行URL编码@伊恩说得对,你需要把他们分开