0

私は Android 開発と SO の初心者です。数か月前に始めたばかりです。皆様、今まで大変お世話になりました!できるだけ多くの外部ライブラリを使用しています。

VolleyJSONObjectを使用して、サーバーに GET リクエストを送信しています。問題は

W/dalvikvm﹕ threadid=1: キャッチされない例外で終了するスレッド (group=0x40a6c9d8)

がスローされ、応答からオブジェクトを使用しようとすると NPE が発生します。

これは、JSONObjectRequest を使用する他の場合には発生しません。これだけです。AndroidManifest.xml 内のアプリケーション タグの android:name フィールドについて調べたところ、何かが見つかりました。それだけではないと思います。

別のスレッドでリクエストを行っているのではないかと思いますが、他のスレッドではなぜそれが起こらないのですか...?

さて、私のログキャットとコードは以下の通りです。私を助けてください!!!

ログキャット:

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。

4

2 に答える 2

0

コードをコピーして Android Studio に貼り付けると、エラー メッセージが表示されます (以下を参照してください。コードは一番下の要求です)。それがあなたの間違いであるかどうかは確信が持てません。MatchRequestActivity.java の 109 行目でヌル ポインター例外が発生していますが、その行の内容は明らかにしていません。これをチェックして、動作するかどうかを確認してください。

        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");
        }
    });

比較したリクエストのスクリーンショット

于 2015-07-16T15:55:44.047 に答える
0

簡単な修正で問題を解決しました。リクエストにヘッダーを追加する必要がありました。

より具体的には、文字列 "" を含む "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;
    }
};
于 2015-09-08T17:28:24.770 に答える