2017-09-08 50 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.. 

    }