Получаване на 400 волейболна сървърна грешка, която работи успешно от 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 от rest client, той дава 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+where+pair+in+%28%27AEDAMD%27%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys%26callback%3D - person kondal; 08.05.2015