2017-09-08 48 views
0

我一直試圖解決No value for JSONObject錯誤沒有任何成功。我得到了JSON響應並使用try塊創建了JSONObject。我在測試證書不正確的日誌,這意味着JSON效應初探就像JSONObject沒有值Android

{"success":false,"messages":"Incorrect email\/password combination"}

我怎樣才能突破這個。這是我的代碼。

try { 


     JSONObject jObj = new JSONObject(response); 
     boolean error = jObj.getBoolean("success"); 

     // Check for error node in json 
     if (!error) { 
      // user successfully logged in 
      // Create login session 
      mSessionManager.setLogin(true); 

      // Now store the user in SQLite 
      JSONObject user = jObj.getJSONObject("user"); 
      String firstName = user.getString("firstname"); 
      String lastName = user.getString("lastname"); 
      String email = user.getString("email"); 
      String created_at = user 
           .getString("created_at"); 
      String uid = String.valueOf(user.getInt("user_id")); 

      // Inserting row in users table 
      mSQLiteHandler.addUser(firstName, lastName, email, uid, created_at); 

      // Launch main activity 
      Intent intent = new Intent(LoginActivity.this, 
           Pedometer.class); 
      startActivity(intent); 
      finish(); 

      } else { 
       // Error in login. Get the error message 
       String errorMsg = jObj.getString("messages"); 
       Toast.makeText(getApplicationContext(), 
           errorMsg, Toast.LENGTH_LONG).show(); 
      } 
    } catch (JSONException e) { 
      // JSON error 
      Toast.makeText(getApplicationContext(), 
      "Json error: " + e.getMessage(), 
          Toast.LENGTH_LONG).show(); 
    } 

我試圖把代碼塊if塊內的內部if(jObj.has("user")但正在顯示沒有錯誤。進度對話框顯示和隱藏立即

+0

在代碼u經驗問題的哪一點請指出? –

+0

@AalapPatel在獲得響應'{「success」:false,「messages」:「不正確的電子郵件\ /密碼組合}}'之後,您在嘗試塊 – facilitator

+0

正在使用改進之前收到了嗎? –

回答

1

你想獲得值時,成功是FASLE ...嘗試找回它成功的時候是真的

try { 


    change ----> JSONObject jObj = new JSONObject(response.body().toString); 
     boolean error = jObj.getBoolean("success"); 

     // Check for error node in json 
    change ----> if (error) { 
//retrieve values here 
} 
+0

謝謝..yes完美的作品。是一個邏輯錯誤。在api中,我使用成功而不是錯誤,所以將錯誤更改爲成功是有道理的,因此它是'if(success)'而不是'if(error') – facilitator

0

我想補充的東西Akshay的回答是,對於最佳實踐,您應該總是試着檢查響應是否成功。像這樣..

if(response.isSuccessful()){ 

     String responseBody = response.body().string(); 
     try { 


    JSONObject jObj = new JSONObject(responseBody); //here was the cause mentioned by Akshay 
    boolean error = jObj.getBoolean("success"); 

    // Check for error node in json 
    if (!error) { 
     // user successfully logged in 
     // Create login session 
     mSessionManager.setLogin(true); 

     // Now store the user in SQLite 
     JSONObject user = jObj.getJSONObject("user"); 
     String firstName = user.getString("firstname"); 
     String lastName = user.getString("lastname"); 
     String email = user.getString("email"); 
     String created_at = user 
          .getString("created_at"); 
     String uid = String.valueOf(user.getInt("user_id")); 

     // Inserting row in users table 
     mSQLiteHandler.addUser(firstName, lastName, email, uid, created_at); 

     // Launch main activity 
     Intent intent = new Intent(LoginActivity.this, 
          Pedometer.class); 
     startActivity(intent); 
     finish(); 

     } else { 
      // Error in login. Get the error message 
      String errorMsg = jObj.getString("messages"); 
      Toast.makeText(getApplicationContext(), 
          errorMsg, Toast.LENGTH_LONG).show(); 
     } 
     } catch (JSONException e) { 
     // JSON error 
     Toast.makeText(getApplicationContext(), 
     "Json error: " + e.getMessage(), 
         Toast.LENGTH_LONG).show(); 
     } 

    } 
    else{ 
      //here you should observe error caused.. 

    }