2017-07-09 21 views
1

String値をJSONObjectに変換できないというエラーが表示されます。私はCSRFTokenをパラメータとしてJSONObjectRequestに渡そうとしています。これが正しい方法であれば私には分かりません。String型の値をJSONObjectに変換できません

私は、エラーメッセージが出てい:org.json.JSONException: Value inz9J9w0N5qASdJO8soWFBZ4UrEpdnjnpmxvFbJ2 of type java.lang.String cannot be converted to JSONObject

関連するコードは以下の通りです。

HashMap<String, String> params = new HashMap<>(); 
params.put("_token", ((TestApplication) getApplication()).getCSRFToken()); 

JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(params), new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     AlertDialog alertDialog = new AlertDialog.Builder(RegisterActivity.this).create(); 
     alertDialog.setTitle("Alert"); 
     Log.i("response", response.toString()); 
     alertDialog.setMessage(response.toString()); 
     alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
     alertDialog.show(); 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     AlertDialog alertDialog = new AlertDialog.Builder(RegisterActivity.this).create(); 
     alertDialog.setTitle("Alert"); 
     alertDialog.setMessage(error.getMessage()); 
     alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
     alertDialog.show(); 
    } 
}); 

queue.add(stringRequest); 

誰かが私が間違っている可能性があり、問題を解決する方法を知っていますか?

+0

んが.getCSRFToken()まさに "inz9J9w0N5qASdJO8soWFBZ4UrEpdnjnpmxvFbJ2" を返すか、引用符や中括弧のような追加の文字があるのですか? – phatfingers

答えて

0

以下が有効です。

{ 
    "_token": "inz9J9w0N5qASdJO8soWFBZ4UrEpdnjnpmxvFbJ2" 
} 

あなたは

String tokenString = (String) ((TestApplication) getApplication()).getCSRFToken(); 
JSONObject params = new JSONObject(); 
params.put("_token", tokenString); 

JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() { 
// ... 
} 
+0

私はHashMapを使用する代わりに、そのメソッドを試してみました。私は何時間もそれを試していましたが、意味がありません。エラーの詳細を知る方法はありますか? VolleyErrorには何かが必要です。 – user3439733

+0

私は、(何らかの理由で)私のサーバがトークンを返していることを知り、 'parseNetworkResponse'でエラーが発生しています。 – user3439733

+0

これはjson変換の問題ではないようですが、サーバーが応答するときです。サーバーからの応答をチェックして、正しいデータ形式を返すことを確認できますか。 – Lawliet

0

を試すことができ、私はそれを考え出しました。 JsonObjectRequestは受け入れヘッダーを送信しません。受諾ヘッダーを追加した後、私は後に応答を得ることができました。

決勝コード:

HashMap<String, String> params = new HashMap<>(); 

JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(params), new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     // ... 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     AlertDialog alertDialog = new AlertDialog.Builder(RegisterActivity.this).create(); 
     alertDialog.setTitle("Alert"); 
     //alertDialog.setMessage(error.toString()); 
     alertDialog.setMessage(new String(error.networkResponse.data)); 
     alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
     alertDialog.show(); 
    } 
}) { 
    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String, String> params = new HashMap<>(); 
     params.put("X-CSRF-TOKEN", ((TestApplication) getApplication()).getCSRFToken()); 
     params.put("Accept", "application/json"); 
     return params; 
    } 
}; 

queue.add(stringRequest); 
関連する問題