BasicNetwork.performRequest - непредвиденный код ответа 400 в Android 6.0.1, но не на эмуляторе - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь ниже код на моем Android Samsung, и он выдает ошибку. (Я хочу получить свойство канала)

String URL = "https://www.googleapis.com/youtube/v3/search?hl=tr_TR&part=snippet&q=" + channel + "&type=channel&safeSearch=moderate&maxResults=1&key=xxxxxx";
StringRequest stringRequest = new StringRequest(StringRequest.Method.GET, URL, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray jsonArray = jsonObject.getJSONArray("items");
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject item = jsonArray.getJSONObject(i);
                JSONObject snippet = item.getJSONObject("snippet");
                String channelId = snippet.getString("channelId");
                //getVideo(channelId);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }


    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
    //  Log.e("Error", error.getMessage());
    //  Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

);
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(stringRequest);

выдает эту ошибку:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.cocuklaricin.junioryoutube, PID: 13820
    java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.e(Log.java:334)
        at com.cocuklaricin.junioryoutube.MainActivity$1$2.onErrorResponse(MainActivity.java:127)
        at com.android.volley.Request.deliverError(Request.java:617)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:104)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:158)
        at android.app.ActivityThread.main(ActivityThread.java:7225)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
I/qtaguid: Untagging socket 45
E/Volley: [4518] BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/youtube/v3/search?hl=tr_TR&part=snippet&q=Cartoon Network Türkiye&type=channel&safeSearch=moderate&maxResults=1&key=xxxx

Но когда я пробую его на моем эмуляторе, он работает нормально.

В чем разница? Как я могу решить эту ошибку?

Заранее спасибо

1 Ответ

1 голос
/ 12 октября 2019

попробуйте проверить null перед использованием error.getMessage(), как показано ниже

   new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                         if(error.getMessage==null){
                             Toast.makeText(MainActivity.this, "Failed to retrieve data", Toast.LENGTH_LONG).show();
                         }
                         else{

                             Toast.makeText(MainActivity.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
                         }

                });

, также не забудьте преобразовать его в строку как error.getMessage().toString();

ОБНОВЛЕНИЕ

Убедитесь, что ваш url не должен содержать пробелов, поэтому IMO вы можете заменить любой пробел на входе channel на %20, например Cartoon%20Network%20Türkiye, тогда этот url будет действительным.

...