2014-04-01 22 views
0

我想要實現的是我正在工作的應用程序的註冊腳本,一旦用戶單擊註冊它更新使用php的外部mysql數據庫(工作正常),然後也存儲到設備上的本地sqllite數據庫中。我得到的錯誤是這樣的:SQLite,JSON,爲Android程序錯誤

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":"[email protected]"}} 
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; 
    } 

的adduser:

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 
    } 
+1

後您JSON解析代碼,可能是你在其中「fname」改變標籤名稱: 「戴夫」。 – fida1989

+1

不要只發布logcat輸出。發佈導致錯誤的代碼。 – Squonk

+0

邏輯代碼更新,瞭解您的代碼中存在什麼問題 – Amitsharma

回答

0

那麼它有問題看起來實際上比我想的要簡單得多:

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現在關鍵,以及這是不是在原來的

0

試試..

{          //Main JSONObject 
    "tag": "register", 
    "success": 1, 
    "error": 0, 
    "user": {       //User JSONObject 
     "fname": "dave", 
     "lname": "test", 
     "email": "[email protected]" 
    } 
} 

代碼:

JSONObject json = new JSONObject(response); 

Log.v("tag",""+json.getString("tag")); 
Log.v("success",""+json.getString("success")); 
Log.v("error",""+json.getString("error")); 

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

Log.v("fname",""+JObj.getString("fname")); 
Log.v("lname",""+JObj.getString("lname")); 
Log.v("email",""+JObj.getString("email")); 
0

錯誤說,no value for dave。它的意思是你試圖得到dave的價值。而 戴夫value,你需要一個key來獲得價值。你的情況fname因此是key你需要寫

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

現在FNAME中有Dave

+0

嗨,我已經添加了我的代碼,你可以看到我已經有這樣的東西 – dave

0

在給定的JSON的觀察作爲託運和http://jsonviewer.stack.hu/

{ 
    "tag": "register", 
    "success": 1, 
    "error": 0, 
    "user": { 
    "fname": "dave", 
    "lname": "test", 
    "email": "[email protected]" 
    } 
} 

但是驗證看起來不錯可能是你在解析代碼,以便使用如下代碼

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");