JSONObjectRequest с выбросами Volley W/dalvikvm﹕ threadid=1: поток завершается с необработанным исключением (group=0x40a6c9d8)

Я новичок в разработке Android и в SO, я только начал пару месяцев назад. Вы, ребята, были огромной помощью до сих пор! Я использую столько внешних библиотек, сколько могу.

Я использую Volley и JSONObject, чтобы сделать запрос GET на сервер. Проблема в

W/dalvikvm﹕ threadid=1: поток завершается с необработанным исключением (группа=0x40a6c9d8)

выбрасывается, и я получаю NPE при попытке использовать объект из ответа.

Этого не происходит в других случаях, когда я использую JSONObjectRequest, только в этот раз. Я исследовал и нашел кое-что о поле android:name в теге приложения внутри AndroidManifest.xml. Я не думаю, что это все.

Я подозреваю, что речь идет о том, чтобы сделать запрос в другом потоке, но почему это не происходит в других случаях...?

Ну, мой logcat и код ниже. Помогите мне, пожалуйста!!!

logcat:

07-16 02:01:37.466  22635-22635/com.revmob.android.setup W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40a6c9d8)
07-16 02:01:37.476  22635-22635/com.revmob.android.setup E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.revmob.android.setup/com.pubmobile.ellow.Controller.Main.MatchFragment.MatchRequestActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1975)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2000)
        at android.app.ActivityThread.access$600(ActivityThread.java:123)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4443)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.pubmobile.ellow.Controller.Main.MatchFragment.MatchRequestActivity.onCreate(MatchRequestActivity.java:109)
        at android.app.Activity.performCreate(Activity.java:4668)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1939)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2000)
        at android.app.ActivityThread.access$600(ActivityThread.java:123)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4443)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
        at dalvik.system.NativeStart.main(Native Method)

Мой код: MatchRequestActivity.java

String url = Constants.URL_SERVER;
JsonObjectRequest getMatchRequest = new JsonObjectRequest(com.android.volley.Request.Method.GET, url, new com.android.volley.Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        if(response != null) {

            System.out.println(response);

        } else{
            System.out.println("null Response from getMatchRequest");
        }
    }
}, new com.android.volley.Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        System.out.println("no Response from getMatchRequest");
    }
});
RequestQueueManager.getInstance(this).addToRequestQueue(getMatchRequest);

Что у меня есть сейчас:

Хотя мой сервер отлично отправляет ответ, мой код даже не вводит onResponse() и выдает ошибку. Тогда NPE из-за отсутствия ответа.


person Vítor Kim    schedule 16.07.2015    source источник
comment
Что такое строка 109 в MatchRequestActivity.java?   -  person Sloganho    schedule 16.07.2015
comment
В строке 109 я пытаюсь использовать имя пользователя, полученное из запроса GET:   -  person Vítor Kim    schedule 17.07.2015
comment
getSupportActionBar().setTitle(userB_match.getName() + профиль);   -  person Vítor Kim    schedule 17.07.2015
comment
Либо getSupportActionBar(), либо getName() вызывают исключение нулевого указателя. Это ваша ошибка в трассировке стека. Вызвано: java.lang.NullPointerException в com.pubmobile.ellow.Controller.Main.MatchFragment.MatchRequestActivity.onCreate(MatchRequestActivity.java:109)   -  person Sloganho    schedule 17.07.2015
comment
Если вы хотите опубликовать весь свой код для MatchRequestActivity.java, вам будет легче помочь.   -  person Sloganho    schedule 17.07.2015
comment
Спасибо, @Sloganho! Я сделаю это через минуту! Поскольку я уверен, что проблема в JSONObjectRequest... Мне удалось распечатать ошибку из запроса GET: com.android.volley.NoConnectionError: java.io.EOFException. Любые идеи?   -  person Vítor Kim    schedule 17.07.2015


Ответы (2)


Когда я скопировал и вставил ваш код в Android Studio, он показывает сообщение об ошибке (см. Ниже. Ваш код является нижним запросом). Я переработал его и добавил отсутствующий параметр, и он больше не выдает ошибку. Я не уверен, что это твоя ошибка. Вы получаете исключение нулевого указателя в строке 109 MatchRequestActivity.java, но не раскрываете, что находится в этой строке. Проверьте это и посмотрите, работает ли это.

        JsonObjectRequest getMatchRequest = new JsonObjectRequest(Request.Method.GET,
            url, null, new com.android.volley.Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            if(response != null) {

                System.out.println(response);

            } else{
                System.out.println("null Response from getMatchRequest");
            }
        }
    }, new com.android.volley.Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            System.out.println("no Response from getMatchRequest");
        }
    });

Скриншот сравниваемых запросов

person Sloganho    schedule 16.07.2015
comment
Привет, @Sloganho и спасибо за ответ. Я добавил параметр (также пришлось привести его к строке), но все равно отображается та же ошибка: / - person Vítor Kim; 17.07.2015

Я решил свою проблему с помощью простого исправления: мне пришлось добавить заголовки к моему запросу.

В частности, заголовки «accept-encoding» со строкой «».

Код ниже:

JsonObjectRequest getMatchRequest = new JsonObjectRequest(Request.Method.GET,
        url, null, new com.android.volley.Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        if(response != null) {

            System.out.println(response);

        } else{
            System.out.println("null Response from getMatchRequest");
        }
    }
}, new com.android.volley.Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        System.out.println("no Response from getMatchRequest");
    }
}) {
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("accept-encoding", "");
        return headers;
    }
};
person Vítor Kim    schedule 08.09.2015