首页 > 解决方案 > JSONArray 无法转换为 JSONObject 错误,当用作类似代码时

问题描述

当我对注册方法执行相同操作时出现此错误,我在登录时使用它并且效果很好,但是在注册时我收到数组无法转换为 JSONObject 的错误,我正在尝试将数组放入将其转换为 JSONObject 以将其发送到我的数据库 PHP 代码

这是我的注册方法

private void registerUser() {
    final String phone = phonenumber.getText().toString().trim();
    final String lname = lastname.getText().toString().trim();
    final String fname = fullname.getText().toString().trim();
    final String mname = middlename.getText().toString().trim();
    final String add = address.getText().toString().trim();
    final String count = country.getText().toString().trim();


    //first we will do the validations
    if (TextUtils.isEmpty(lname)) {
        lastname.setError("Please your Last Name");
        lastname.requestFocus();
        return;
    }

    if (TextUtils.isEmpty(fname)) {
       fullname.setError("Please enter your First Name");
       fullname.requestFocus();
        return;
    }

    if (TextUtils.isEmpty(add)) {
        address.setError("Please enter your Address");
        fullname.requestFocus();
        return;
    }
    


    StringRequest stringRequest = new StringRequest(Request.Method.POST, URLs.URL_REGISTER,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String Response) {


                    try {
                        //converting response to json object
                        JSONObject obj = new JSONObject(Response);
                        //if no error in response
                        if (!obj.getBoolean("error")) {
                            Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();

                            //getting the user from the response
                            JSONObject userJson = obj.getJSONObject("user");

                            //creating a new user object
                            User user = new User(
                                    userJson.getString("phone_number"),
                                    userJson.getString("lastname"),
                                    userJson.getString("fullname"),
                                    userJson.getString("middleinitial"),
                                    userJson.getString("country"),
                                    userJson.getString("address")
                            );

                            //storing the user in shared preferences
                            SharedPrefManager.getInstance(getApplicationContext()).userLogin(user);

                            //starting the profile activity
                            finish();
                            startActivity(new Intent(getApplicationContext(), MainActivity.class));
                        } else {
                            Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("phone_number", phone);
            params.put("lastname", lname);
            params.put("fullname", fname);
            params.put("middleinitial", mname);
            params.put("country", count);
            params.put("address",add);
            return params;
        }
    };

    VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);
}

此代码出现 JSON Array 无法转换的错误,而我的具有相同格式的登录代码正在工作

这是我的登录代码:

private void userLogin(){
    //first getting the values
    final String phonenumber = etNumber.getText().toString();

    //validating inputs
    if (TextUtils.isEmpty(phonenumber)) {
        etNumber.setError("Please enter your Number");
        etNumber.requestFocus();
        return;
    }

    //if everything is fine
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URLs.URL_LOGIN,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    try {
                        //converting response to json object
                        JSONObject obj = new JSONObject(response);

                        //if no error in response
                        if (!obj.getBoolean("error")) {
                            Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();

                            //getting the user from the response
                            JSONObject userJson = obj.getJSONObject("user");

                            //creating a new user object
                            User user = new User(
                                    userJson.getString("phone_number"),
                                    userJson.getString("lastname"),
                                    userJson.getString("fullname"),
                                    userJson.getString("middleinitial"),
                                    userJson.getString("country"),
                                    userJson.getString("address")
                            );

                            //storing the user in shared preferences
                            SharedPrefManager.getInstance(getApplicationContext()).userLogin(user);
                            //starting the profile activity
                            finish();
                            startActivity(new Intent(getApplicationContext(), MainActivity.class));
                        } else {
                            Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();

                }
            })
    {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("phone_number", phonenumber);

            return params;
        }
    };

    VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);
}

我在日志上遇到的错误是:

W/System.err: org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject
    at org.json.JSON.typeMismatch(JSON.java:112)
    at org.json.JSONObject.<init>(JSONObject.java:168)
    at org.json.JSONObject.<init>(JSONObject.java:181)
    at com.example.redwallet.Register$4.onResponse(Register.java:127)
W/System.err:     at com.example.redwallet.Register$4.onResponse(Register.java:120)
    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:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:224)
    at android.app.ActivityThread.main(ActivityThread.java:7562)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

标签: arraysjson

解决方案


推荐阅读