[英]W/System.err: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
[英]W/System.err: org.json.JSONException: Value Database of type java.lang.String cannot be converted to JSONObject
W/System.err: org.json.JSONException: 类型 java.lang.String 的值数据库无法转换为 JSONObject
Android Studio 中显示的错误
W/System.err: org.json.JSONException: Value Database of type java.lang.String cannot be converted to JSONObject
at org.json.JSON.typeMismatch(JSON.java:111)
at org.json.JSONObject.<init>(JSONObject.java:163)
at org.json.JSONObject.<init>(JSONObject.java:176)
at com.abc.SignUp_Activity$6.onResponse(SignUp_Activity.java:122)
W/System.err: at com.abc.SignUp_Activity$6.onResponse(SignUp_Activity.java:118)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
E/anyText: Database connected{"success":"0","message":"success"}
安卓代码:
private void registerUser() {
final String email = etEmail.getText().toString().trim();
final String name = etName.getText().toString().trim();
final String password = etPassword.getText().toString().trim();
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("REGISTERING ACCOUNT......!!");
progressDialog.show();
if (TextUtils.isEmpty(email) && TextUtils.isEmpty(password) && TextUtils.isEmpty(name)) {
Toast.makeText(this, "FILL ALL THE FIELD", Toast.LENGTH_SHORT).show();
} else {
StringRequest stringRequest = new StringRequest(Request.Method.POST,
URL_REGIST,
//Getting error here// new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
//Getting error here// JSONObject jsonObject = new JSONObject(response);
//Getting error here// String success = jsonObject.getString("success");
if (success.equals("0")) {
progressDialog.dismiss();
Toast.makeText(SignUp_Activity.this, "REGISTER SUCCESS......!!", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(SignUp_Activity.this, "EMAIL ALREADY EXISTS...!!", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("anyText", response);
Toast.makeText(SignUp_Activity.this, "ERROR CREATING ACCOUNT....!!"+e.toString(), Toast.LENGTH_SHORT).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(SignUp_Activity.this, "REGISTER FAIL..........!!", Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("name", name);
params.put("email", email);
params.put("password", password);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}
我在上面的代码上有错误,还写了有这个错误的地方
我的php代码:
**
<?php if ($_SERVER['REQUEST_METHOD'] =='POST'){
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$password = password_hash($password, PASSWORD_DEFAULT);
require_once 'connect.php';
$sql = "INSERT INTO users_table (name, email, password) VALUES ('$name', '$email', '$password')";
if ( mysqli_query($conn,$sql) ) {
$result["success"] = "0";
$result["message"] = "success";
echo json_encode($result);
mysqli_close($conn);
}
else {
$result["success"] = "1";
$result["message"] = "error";
echo json_encode($result);
mysqli_close($conn);
}}?>
我认为 myphp 代码很好,但是在上面的 android 代码中有一个我不明白的错误。
尝试将类型请求更改为 json 对象
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.POST, URL_REGIST, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
并更改requestQueue.add(stringRequest);
到requestQueue.add(jsonObjectRequest);
希望这有帮助
编辑:你可以这样改变
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.POST, URL_REGIST, new Response.Listener<JSONObject>() {
//Getting error here// new Response.Listener<String>() {
@Override
public void onResponse(JSONObject response) {
Log.d("RESPONSE",response.toString())
try {
//Getting error here// JSONObject jsonObject = new JSONObject(response);
String success = response.getString("success");
if (success.equals("0")) {
progressDialog.dismiss();
Toast.makeText(SignUp_Activity.this, "REGISTER SUCCESS......!!", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(SignUp_Activity.this, "EMAIL ALREADY EXISTS...!!", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("anyText", response);
Toast.makeText(SignUp_Activity.this, "ERROR CREATING ACCOUNT....!!"+e.toString(), Toast.LENGTH_SHORT).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(SignUp_Activity.this, "REGISTER FAIL..........!!", Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("name", name);
params.put("email", email);
params.put("password", password);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonObjectRequest);
查看堆栈跟踪、异常消息以及 Android JSONObject 和 JSON 类的源代码,很明显您正在使用字符串“Database”作为参数调用new JSONObject
。 那是失败的......自然。
response
字符串似乎不是您认为的那样。 您应该能够通过在尝试解码之前记录response
的值来确认这一点。
(注意:注释掉的代码使您不确定您在 Java 端实际运行的是什么。我假设您正在调用new JSONObject(String)
......但它被注释掉了。您的堆栈跟踪和代码不匹配。类似地,我对 PHP 代码表示怀疑……因为我看不出它是如何生成“数据库”作为响应的。)
可能有更优雅的方法来处理响应 -> JSON 转换(请参阅其他答案),但我认为真正的问题是您得到的响应不是有效的 JSON ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.