Android程序的SQLite、JSON中存在错误

Android程序的SQLite、JSON中存在错误,android,json,sqlite,Android,Json,Sqlite,我试图实现的是我正在开发的应用程序的注册脚本,一旦用户单击register,它就可以使用php更新外部mysql数据库,然后还可以存储到设备上的本地sqllite数据库中。我得到的错误是: 04-01 11:09:30.553 8592-8667/com.zelphe.zelpheapp E/JSON﹕ {"tag":"register","success":1,"error":0,"user":{"fname":"dave","lname":"test","email":"test@gm

我试图实现的是我正在开发的应用程序的注册脚本,一旦用户单击register,它就可以使用php更新外部mysql数据库,然后还可以存储到设备上的本地sqllite数据库中。我得到的错误是:

04-01 11:09:30.553    8592-8667/com.zelphe.zelpheapp E/JSON﹕ {"tag":"register","success":1,"error":0,"user":{"fname":"dave","lname":"test","email":"test@gmail.com"}}
04-01 11:09:30.613    8592-8592/com.zelphe.zelpheapp W/System.err﹕ org.json.JSONException: No value for dave
我有点不明白这到底意味着什么/我必须修复

dave不应该有价值,因为dave才是价值?据我所知,登记工作进展顺利吗

编辑-添加代码

好的,这是当它卡住时正在运行的活动

 if (Integer.parseInt(res) == 1) {
                        pDialog.setMessage("Loading User Space");
                        pDialog.setTitle("Getting Data");
                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");
                        /**
                         * Clear all previous data in SQlite database.
                         **/
                        UserFunctions logout = new UserFunctions();
                        logout.logoutUser(getApplicationContext());
                        db.addUser(json_user.getString(userFirstName), json_user.getString(userLastName), json_user.getString(userEmail));
                        /**
                         *If JSON array details are stored in SQlite it launches the User Panel.
                         **/
                        Intent upanel = new Intent(getApplicationContext(), MainActivity.class);
                        upanel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        pDialog.dismiss();
                        startActivity(upanel);
                        /**
                         * Close Login Screen
                         **/
                        finish();
注销用户:

public boolean logoutUser(Context context){
        DatabaseHandler db = new DatabaseHandler(context);
        db.resetTables();
        return true;
    }
地址用户:

public void addUser(String userFirstName, String userLastName, String userEmail) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_FIRSTNAME, userFirstName); // FirstName
        values.put(KEY_LASTNAME, userLastName); // LastName
        values.put(KEY_EMAIL, userEmail); // Email




        // Inserting Row
        db.insert(TABLE_LOGIN, null, values);
        db.close(); // Closing database connection
    }
试试这个

{                                       //Main JSONObject
    "tag": "register",
    "success": 1,
    "error": 0,
    "user": {                           //User JSONObject
        "fname": "dave",
        "lname": "test",
        "email": "test@gmail.com"
    }
}
代码:

错误是说,dave没有价值。这意味着你正在努力获得戴夫的价值。鉴于 Dave是一个值,您需要一个键来获取值。在您的情况下,fname是一个键,因此您需要编写

JSONObject obj = json.getJSONObject("user");
String fname = obj.getString("fname");

现在fname中有Dave了。

对给定json的观察结果表明,在

但是,您可能在解析代码时遇到问题,因此请使用下面给定的代码

JSONObject json = new JSONObject(response);

String tag=json.getString("tag");
int success=json.getInt("success");
int error=json.getInt("error");

JSONObject JObj = json.getJSONObject("user");

String fname=JObj.getString("fname");
String lname=JObj.getString("lname");
String email=JObj.getString("email");

看起来这比我想象的要简单得多:

db.addUser(json_user.getString(userFirstName), json_user.getString(userLastName), json_user.getString(userEmail));
这是要求的关键,我在那里发送的值

应该是

db.addUser(json_user.getString(KEY_UID),json_user.getString(KEY_FIRSTNAME), json_user.getString(KEY_LASTNAME), json_user.getString(KEY_EMAIL));

我现在也在这里添加了一个uid密钥,它不在原始的json解析代码中,可能是您更改了fname:dave中的标记名。不要只发布logcat输出。发布导致错误的代码。逻辑代码更新,以了解现在添加的编解码器中存在的问题,即使在每个人都发表了有用的帖子之后,仍然有点不知所措,从我所看到的,我基本上已经完成了注释中的操作。我已经更新了我所有的标签等,以匹配表中的名称,但仍然没有运气,我想问题是为什么它将dave视为令牌而不是密钥?嗨,我已经添加了我的代码,正如你所看到的,我已经有了类似的东西
db.addUser(json_user.getString(userFirstName), json_user.getString(userLastName), json_user.getString(userEmail));
db.addUser(json_user.getString(KEY_UID),json_user.getString(KEY_FIRSTNAME), json_user.getString(KEY_LASTNAME), json_user.getString(KEY_EMAIL));