Получение ошибки сервера 400 volley, которая успешно работает с клиентом Rest

Я получаю ошибку сервера 400 для запроса на получение залпа по указанному ниже URL-адресу.

http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ('AEDALL')&format=json&env=store://datatables.org/alltableswithkeys&callback=

когда я нажимаю тот же URL-адрес от клиента отдыха, он дает ответ json

Вот мой код для запроса залпа

private void convertCurrenctVolleyTask(String from, final String to, final String amount) {

    String url_yahoo = "http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ('"+from+to+"')&format=json&env=store://datatables.org/alltableswithkeys&callback=";

    final ProgressDialog progressDialog;
    progressDialog = new ProgressDialog(CurrencyConverter.this);
    progressDialog.setMessage("Please wait...");
    progressDialog.setCancelable(true);
    progressDialog.show();

    JsonObjectRequest GetCurrenciesjsObjRequest = new JsonObjectRequest(
            Request.Method.GET, url_yahoo, null,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    progressDialog.cancel();
                    if (response != null) {
                            parseGetCurrencyResp(response,to,amount);

                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    progressDialog.cancel();
                    Toast.makeText(CurrencyConverter.this,
                            "Server error..", Toast.LENGTH_SHORT).show();
                    error.printStackTrace();

                }
            });

    ConfigVolley.getInstance().addToRequestQueue(GetCurrenciesjsObjRequest);

}

Любая помощь приветствуется


person kondal    schedule 08.05.2015    source источник


Ответы (2)


Вам нужно будет заменить все вхождения пробела ("") на %20 url_yahoo = url_yahoo.replace(" ", "%20");

person leibreichb1    schedule 08.05.2015
comment
добро пожаловать, если вы не возражаете, можете ли вы принять ответ, так как он сработал. - person leibreichb1; 08.05.2015
comment
Я получал действительно странную ошибку от моего сервера Phusion Passenger. Просто ответ 400 с недопустимой строкой константы, но только на Android ‹ 23 и ниже. Оказывается, у меня был пробел в моем URL. Я предполагаю, что после этого Volley автоматически исправляет неверную кодировку? - person Erik Rothoff; 09.12.2017

Это неправильно отформатированный URL. Вам необходимо закодировать параметры URL, чтобы они не содержали недопустимых символов.

Попробуйте использовать URLEncoder перед использованием url_yahoo следующим образом:

String query = "select * from yahoo.finance.xchange where pair in ('"+from+to+"')";
query = URLEncoder.encode(query, "utf-8");

String env = "store://datatables.org/alltableswithkeys&callback=";
env = URLEncoder.encode(query, "utf-8");

url_yahoo = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&env=" + env;
person Bryan Herbst    schedule 08.05.2015
comment
Спасибо за ваш ответ, я получаю ниже отформатированный URL с тем же 400 05-08 20:09:11.902: E/Volley(7509): [47873] BasicNetwork.performRequest: Неожиданный код ответа 400 для query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance. xchange+где+пара+в+%28%27AEDAMD%27%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys%26callback%3D - person kondal; 08.05.2015