json org.json.JSONException获取信息的问题:用户无值

时间:2019-05-22 06:01:32

标签: java php android mysql json

我遇到了以下问题: 注册期间。应用程序将数据发送到服务器,并发送到适当的表,但是在确认注册后。我每次都会收到该错误

有人告诉我为什么会这样吗?=(

D/Volley: [83] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://sample-tech.000webhostapp.com/Test/verification.php 0x7233d495 NORMAL 2> [lifetime=4050], [size=241], [rc=200], [retryCount=0]
D/EmailVerify: Verification Response: {"tag":"verify_code","error":false,"message":"Verify successful!","app_users_tb":{"id_users":"5ce4d1d2631456.69823541","f_name_users":"Adm","email_users":"sample@live.com","verified_users":"1","created_at_users":"2019-05-22 04:36:34"}}


W/System.err: org.json.JSONException: No value for user
W/System.err:     at org.json.JSONObject.get(JSONObject.java:355)
W/System.err:     at org.json.JSONObject.getJSONObject(JSONObject.java:574)
W/System.err:     at tech.4pts.entry.EmailVerify$4.onResponse(EmailVerify.java:127)
W/System.err:     at tech.4pts.entry.EmailVerify$4.onResponse(EmailVerify.java:117)
W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:78)
W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
W/System.err:     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:733)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:136)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5017)
W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
W/System.err:     at dalvik.system.NativeStart.main(Native Method)

这是导入应用程序条目的表的结构。

DROP TABLE IF EXISTS `app_users_tb`;
CREATE TABLE IF NOT EXISTS `app_users_tb` (
  `id_users` varchar(23) NOT NULL,
  `f_name_users` varchar(20) NOT NULL,
  `s_name_users` varchar(20) NULL,
  `b_day_users` date DEFAULT NULL,
  `gender_of_users` varchar(3) DEFAULT NULL,
  `email_users` varchar(30) NOT NULL,
  `phone_users` int(20) DEFAULT NULL,
  `zip_code_users` int(10) DEFAULT NULL,
  `country_of_users` varchar(20) DEFAULT NULL,
  `city_of_users` varchar(30) DEFAULT NULL,
  `encrypted_password_users` varchar(250) NOT NULL,
  `otp_users` int(6) NOT NULL,
  `verified_users` int(1) NOT NULL DEFAULT '0',
  `created_at_users` datetime DEFAULT NULL,
  PRIMARY KEY (`id_users`),
  UNIQUE KEY `email_users` (`email_users`),
  UNIQUE KEY `phone_users` (`phone_users`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我认为这是由于在兼捕中确定数据类型时出错。检查过的Java代码和sqlb一切正常,tomuzhe记录都在数据库中创建,这意味着数据类型和php问题不存在,那我的错误是什么? (

private static final String KEY_ID_USERS = "id_users";  
private static final String KEY_F_NAME_USERS = "f_name_users";
private static final String KEY_S_NAME_USERS = "s_name_users";
private static final String KEY_B_DAY_USERS = "b_day_users";
private static final String KEY_GENDER_OF_USERS = "gender_of_users";
private static final String KEY_EMAIL_USERS = "email_users";
private static final String KEY_PHONE_USERS = "phone_users";
private static final String KEY_ZIP_CODE_USERS = "zip_code_users";
private static final String KEY_COUNTRY_OF_USERS = "country_of_users";
private static final String KEY_CITY_OF_USERS = "city_of_users";
private static final String KEY_CREATED_AT_USERS = "created_at_users";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
private static final String CREATE_TABLE_USERS = "CREATE TABLE " + TABLE_USERS + "(" // Table Create Statements
        + KEY_ID_USERS + " TEXT PRIMARY KEY,"
        + KEY_F_NAME_USERS + " TEXT,"
        + KEY_S_NAME_USERS + " TEXT,"
        + KEY_B_DAY_USERS + " TEXT,"
        + KEY_GENDER_OF_USERS + " TEXT,"
        + KEY_EMAIL_USERS + " TEXT UNIQUE,"
        + KEY_PHONE_USERS + " INTEGER UNIQUE,"
        + KEY_ZIP_CODE_USERS + " INTEGER,"
        + KEY_COUNTRY_OF_USERS + " TEXT,"
        + KEY_CITY_OF_USERS + " TEXT,"
        + KEY_CREATED_AT_USERS + " TEXT" + ")";
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_TABLE_USERS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
    onCreate(db);
}

public void addUser(String id_users, String f_name_users, String email_users, String created_at_users) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_ID_USERS, id_users); // uid
    values.put(KEY_F_NAME_USERS, f_name_users);
    values.put(KEY_EMAIL_USERS, email_users);
    values.put(KEY_CREATED_AT_USERS, created_at_users);
    db.insert(TABLE_USERS, null, values);
    db.close();
}

PHP脚本,当输入验证代码时,看起来好像已验证的用户= 1,甚至有一半收到错误«W / System.err:org.json.JSONException:用户无值

        $user = $stmt->fetch();
        if ($otp_users_ok == true) {
            $response["error"] = false;
            $response["message"] = "Verify successful!";
            $response["app_users_tb"]["id_users"] = $user["id_users"];
            $response["app_users_tb"]["f_name_users"] = $user["f_name_users"];
            $response["app_users_tb"]["email_users"] = $user["email_users"];
            $response["app_users_tb"]["verified_users"] = $user["verified_users"];
            $response["app_users_tb"]["created_at_users"] = $user["created_at_users"];
            die(json_encode($response));
        } else {
            $response["error"] = true;
            $response["message"] = "Invalid Credentials!";
            die(json_encode($response));
        }
    }

Java验证过程代码

private void verifyCode(final String email_users, final String otp_users) {
    String tag_string_req = "req_verify_code";// Tag used to cancel the request
    pDialog.setMessage("Checking in ...");
    showDialog();
    StringRequest strReq = new StringRequest(Request.Method.POST,
            Functions.OTP_VERIFY_URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG, "Verification Response: " + response);
            hideDialog();
            try {
                JSONObject jObj = new JSONObject(response);
                boolean error = jObj.getBoolean("error");
                // Check for error node in json
                if (!error) {
                    JSONObject json_user = jObj.getJSONObject("user");
                    Functions logout = new Functions();
                    logout.logoutUser(getApplicationContext());
                    db.addUser(json_user.getString(KEY_ID_USERS),
                            json_user.getString(KEY_F_NAME_USERS),
                            json_user.getString(KEY_EMAIL_USERS),
                            json_user.getString(KEY_CREATED_AT_USERS));
                    session.setLogin(true);
                    Intent upanel = new Intent(EmailVerify.this, HomeActivity.class);
                    upanel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(upanel);
                    finish();
                } else {
Toast.makeText(getApplicationContext(), " Wrong verification Code", Toast.LENGTH_LONG).show();
                    textVerifyCode.setError("Wrong verification Code");
                }
            } catch (JSONException e) {
                e.printStackTrace(); //!!!!! 
               Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Verify Code Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
            hideDialog();
        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> paramsUsers = new HashMap<>();  
            paramsUsers.put("tag", "verify_code");
            paramsUsers.put("email_users", email_users);
            paramsUsers.put("otp_users", otp_users);
            return paramsUsers;
        }
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String,String> params = new HashMap<String, String>();
            params.put("Content-Type","application/x-www-form-urlencoded");
            return params;
        }
    }; MyApplication.getInstance().addToRequestQueue(strReq, tag_string_req);  
}

1 个答案:

答案 0 :(得分:0)

您正在调用一个不存在的json对象“ user”,它应该是“ app_users_tb”

im = Image.open('filename.webp')
width, height = im.size
print(width,height)