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