java - W/System.err : org. json.JSONException : Value Database of type java. lang.String 无法转换为 JSONObject

标签 java php android mysql database

W/System.err: org.json.JSONException: Value Database of type java.lang.String cannot be converted to 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"}

Android 代码:

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 代码有一个我不明白的错误。

最佳答案

查看堆栈跟踪、异常消息以及 Android JSONObject 和 JSON 类的源代码,很明显您正在使用字符串“Database”作为参数调用 new JSONObject。这自然是失败的。

看起来响应字符串并不是您想象的那样。在尝试解码响应之前,您应该能够通过记录响应的值来确认这一点。

(注意:注释掉的代码让人无法确定您在 Java 端实际运行的是什么。我假设您正在调用 new JSONObject(String) .. .但它被注释掉了。您的堆栈跟踪和代码不匹配。同样,我对 PHP 代码表示怀疑......因为我看不出它如何生成“数据库”作为响应。)

可能有更优雅的方法来处理响应 -> JSON 转换(请参阅其他答案),但我认为真正的问题是您得到的响应不是有效的 JSON .. .

关于java - W/System.err : org. json.JSONException : Value Database of type java. lang.String 无法转换为 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59586480/

相关文章:

php - 如何计算多维数组中所有相同的项

android - 如何知道 Android 应用程序正在发送哪些数据

java - Android模块和代码组织

java - 在 android 中处理最近的应用程序点击和主页按下

java - Thymeleaf 无法检测到 spring-boot 项目中的模板

java - 如何在struts set标签中获取随机值

php - 如何使用边框半径调整图像大小?

java在事件发生前单击2个按钮

php - Netbeans 7 与 PHP 的远程服务器连接

android - Toast 和 onOnclick,toast k 不会显示