мне было интересно, если кто-нибудь может сказать мне, почему я получаю плохую ошибку запроса при попытке выполнить услугу RESTfull с помощью дооснащенияAndroid дооснащения ошибка при построении запроса
Ошибка: HTTP/1.1 400 Bad Request
Вот мои два класса:
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);
}
}
Asyntask в MainActivity
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
}
});
}
}
Результат всегда неудачный. Первоначально я думал, что проблема заключается в том, что встроенный в gson конвертер Retrofit испытывает трудности с преобразованием ответа на объект запаса, поскольку я получал ответ «Retrofit.retrofiterror». Однако ответ «Bad Request» заставил меня думать, что проблема в . 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;
}
}
Любая помощь на этом была бы весьма признательна.
Добавить регистрацию в Модернизацию, чтобы увидеть точный запрос, который он делает. Вы можете сделать это, добавив в ваш RestAdapter файл .setLogLevel (RestAdapter.LogLevel.FULL). – michaelcarrano
Кроме того, поскольку вы используете обратный вызов в своем запросе, нет необходимости вставлять его в AsyncTask. – michaelcarrano
Не избегайте строки запроса YQL. Используйте его, как если бы вы использовали необработанную строку SQL. –