Java 字符串类型的值无法转换为JSONObject

Java 字符串类型的值无法转换为JSONObject,java,android,Java,Android,我遇到一个错误,告诉我它无法将字符串值转换为JSONObject。我试图将CSRFToken作为参数传递给我的JSONObjectRequest。我不知道这样做是否正确 我收到错误消息:org.json.JSONException:java.lang.String类型的Z9J9W0N5QASDJO8SOWFBZ4UREPDNJMXVFBJ2中的值无法转换为JSONObject 相关代码如下 HashMap params=newhashmap(); 参数put(“_token”,((TestApp

我遇到一个错误,告诉我它无法将字符串值转换为JSONObject。我试图将CSRFToken作为参数传递给我的JSONObjectRequest。我不知道这样做是否正确

我收到错误消息:
org.json.JSONException:java.lang.String类型的Z9J9W0N5QASDJO8SOWFBZ4UREPDNJMXVFBJ2中的值无法转换为JSONObject

相关代码如下

HashMap params=newhashmap();
参数put(“_token”,((TestApplication)getApplication()).getCSRFToken());
JsonObjectRequest stringRequest=新的JsonObjectRequest(Request.Method.POST、url、新的JSONObject(params)、新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
AlertDialog AlertDialog=新建AlertDialog.Builder(RegisterActivity.this.create();
alertDialog.setTitle(“警报”);
Log.i(“response”,response.toString());
alertDialog.setMessage(response.toString());
alertDialog.setButton(alertDialog.BUTTON_中性,“确定”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
alertDialog.show();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
AlertDialog AlertDialog=新建AlertDialog.Builder(RegisterActivity.this.create();
alertDialog.setTitle(“警报”);
alertDialog.setMessage(error.getMessage());
alertDialog.setButton(alertDialog.BUTTON_中性,“确定”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
alertDialog.show();
}
});
添加(stringRequest);

有人知道我可能做错了什么,以及如何纠正问题吗?

以下内容应该是有效的

{
    "_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>() {
// ...
}
String-tokenString=(String)((TestApplication)getApplication()).getCSRFToken();
JSONObject参数=新的JSONObject();
参数put(“_token”,tokenString);
JsonObjectRequest stringRequest=新的JsonObjectRequest(Request.Method.POST,url,params,new Response.Listener()){
// ...
}

以下内容应有效

{
    "_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>() {
// ...
}
String-tokenString=(String)((TestApplication)getApplication()).getCSRFToken();
JSONObject参数=新的JSONObject();
参数put(“_token”,tokenString);
JsonObjectRequest stringRequest=新的JsonObjectRequest(Request.Method.POST,url,params,new Response.Listener()){
// ...
}

我已经弄明白了。
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);
HashMap params=newhashmap();
JsonObjectRequest stringRequest=新的JsonObjectRequest(Request.Method.POST、url、新的JSONObject(params)、新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
// ...
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
AlertDialog AlertDialog=新建AlertDialog.Builder(RegisterActivity.this.create();
alertDialog.setTitle(“警报”);
//alertDialog.setMessage(error.toString());
setMessage(新字符串(error.networkResponse.data));
alertDialog.setButton(alertDialog.BUTTON_中性,“确定”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
alertDialog.show();
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map params=新的HashMap();
参数put(“X-CSRF-TOKEN”,((TestApplication)getApplication()).getCSRFToken());
参数put(“接受”、“应用程序/json”);
返回参数;
}
};
添加(stringRequest);

我已经弄明白了。
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);
HashMap params=newhashmap();
JsonObjectRequest stringRequest=新的JsonObjectRequest(Request.Method.POST、url、新的JSONObject(params)、新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
// ...
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
AlertDialog AlertDialog=新建AlertDialog.Builder(RegisterActivity.this.create();
alertDialog.setTitle(“警报”);
//alertDialog.setMessage(error.toString());
setMessage(新字符串(error.networkResponse.data));
alertDialog.setButton(alertDialog.BUTTON_中性,“确定”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
alertDialog.show();
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map params=新的HashMap();
参数put(“X-CSRF-TOKEN”,((TestApplication)getApplication()).getCSRFToken());
参数put(“接受”、“应用程序/json”);
返回参数;
}
};
添加(stringRequest);

我也尝试了该方法,而不是使用HashMap。我已经玩了好几个小时了,它没有任何意义。有什么方法可以让我找到关于错误的更多信息吗?截击错误肯定有什么原因。我发现了(无论什么原因)我的服务器正在返回令牌,错误发生在
parseNetworkResponse