2017-06-21 36 views
0

Json的错误:sl_summ如何修复X没有值以JSON

PHP代码

If($user_sldtl != null) { 
    for($i = 0; $i < count($user_sldtl); $i++){ 
     $sl_response["error"] = FALSE; 
     $sl_response["sl_summ"]["sl_brcode"] = $user_sldtl[$i][0]; 
     $sl_response["sl_summ"]["sl_memid"] = $user_sldtl[$i][3]; 
     $sl_response["sl_summ"]["sl_desc"] = $user_sldtl[$i][7]; 
     $sl_response["sl_summ"]["tr_date"] = $user_sldtl[$i][10]; 
     $sl_response["sl_summ"]["actual_balance"] = $user_sldtl[$i][14]; 
     $sl_response["sl_summ"]["available_balance"] = $user_sldtl[$i][14]; 
     json_encode($sl_response, true); 
     echo json_encode($sl_response, true); 
       //echo "<br>"; 
    } 

     } 
     else { 
      // echo "Member's data not found"."<br />"; 
      // echo "Var dump: "; 
      // var_dump($user); 
      // echo " ->No record found"; 
      $sl_response["error"] = TRUE; 
      $sl_response["error_msg"] = "NO SL Details found!"; 
      echo json_encode($sl_response); 
     } 

JSON结果用户登录

第一反应没有价值。

{"error":false,"user":{"br_code":12,"mem_id":13,"username":"test","email":"[email protected]","created_at":"2016-07-22 09:05:21"}}

sl_summ的第二个响应。它有两个响应,但没有与其他列相同的值。该sl_summ反应将取决于他有多少行有表 “SL”

{"error":false,"sl_summ":{"sl_brcode":"12","sl_memid":"13","sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"}}

{"error":false,"sl_summ":{"sl_brcode":"12","sl_memid":"13","sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}}

slsumm.java内

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

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

      // Now store the user in SQLite 
      //String uid = jObj.getString("uid"); 

      JSONObject user = jObj.getJSONObject("user"); 
      String br_code = user.getString("br_code"); 
      String mem_id = user.getString("mem_id"); 
      String username = user.getString("username"); 
      String email = user.getString("email"); 
      String created_at = user.getString("created_at"); 

     // Inserting row in users table 
     db.addUser(br_code, mem_id, username, email, created_at); 

     JSONObject sl_summ = jObj.getJSONObject("sl_summ"); 
     String sl_brcode = sl_summ.getString("sl_brcode"); 
     String sl_memid = sl_summ.getString("sl_memid"); 
     String sl_desc = sl_summ.getString("sl_desc"); 
     String tr_date = sl_summ.getString("tr_date"); 
     String actual_balance = sl_summ.getString("actual_balance"); 
        String avail_balance = sl_summ.getString("avail_balance"); 

     // Inserting row in users table 
     db.addUserSLDTL(sl_brcode, sl_memid, sl_desc, tr_date, actual_balance, avail_balance); 

     // Launch main activity 
     Intent intent = new Intent(LoginActivity.this, 
     MainActivity.class); 
     startActivity(intent); 
     finish(); 
     } else { 
     // Error in login. Get the error message 
     String errorMsg = jObj.getString("error_msg"); 
     Toast.makeText(getApplicationContext(), 
     errorMsg, Toast.LENGTH_LONG).show(); 
     } 
     } catch (JSONException e) { 
     // JSON error 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 

SQLiteHandler.java

​​
+0

对不起,没有明白你的问题,你可以请详细说明吗? – sumit

+0

当我登录时,它会重试一个Json错误:没有值为sl_summ。即使它在sl_summ中有一个值。 – John

+0

你能分享代码你如何在登录时获取json? – sumit

回答

0

至于你说的你已经解析了用户数据。

对于sl_summ使用本:

我已经采取了你的反应中就可以直接做它从你的回应字符串:

private static String sl_summResponse = "{\n" + 
      " \"error\": false,\n" + 
      " \"sl_summ\": {\n" + 
      " \"sl_brcode\": \"12\",\n" + 
      " \"sl_memid\": \"13\",\n" + 
      " \"sl_desc\": \"PA : Savings Account\",\n" + 
      " \"tr_date\": \"2015-08-17\",\n" + 
      " \"actual_balance\": \"483.67\",\n" + 
      " \"available_balance\": \"483.67\"\n" + 
      " }\n" + 
      "},\n" + 
      "{\n" + 
      " \"error\": false,\n" + 
      " \"sl_summ\": {\n" + 
      " \"sl_brcode\": \"12\",\n" + 
      " \"sl_memid\": \"13\",\n" + 
      " \"sl_desc\": \"PA : Savings - Cash Bond\",\n" + 
      " \"tr_date\": \"2015-08-28\",\n" + 
      " \"actual_balance\": \"10129.43\",\n" + 
      " \"available_balance\": \"10129.43\"\n" + 
      " }\n" + 
      "}"; 

然后解析你这样的回应:

try { 
      JSONObject jObj = new JSONObject(sl_summResponse); 
      Boolean error = jObj.getBoolean("error"); 
      Log.e("Test","Error : "+error); 
      if (!error){ 
       JSONArray sl_summ = jObj.optJSONArray("sl_summ"); 
       for (int i =0;i<sl_summ.length();i++){ 
        JSONObject rootObj = sl_summ.getJSONObject(i); 
        String sl_brcode = rootObj.getString("sl_brcode"); 
        String sl_memid = rootObj.getString("sl_memid"); 
        String sl_desc = rootObj.getString("sl_desc"); 
        String tr_date = rootObj.getString("tr_date"); 
        String actual_balance = rootObj.getString("actual_balance"); 
        String avail_balance = rootObj.getString("avail_balance"); 
        // then do whatever you want with this data 
        // Inserting row in users table 
        db.addUserSLDTL(sl_brcode, sl_memid, sl_desc, tr_date, actual_balance, avail_balance); 
       } 
      } 
+0

但先生我不知道私人静态字符串sl_summResponse的确切值。因为数据是动态的,它会依赖会是怎样的表“SL”内部数据” – John

+0

一些用户SL表内的1个数据有一些2个或更多...我怎样才能使它的动态先生? – John

+0

Np个什么价值是我采取它是否有一个值20也不会有所作为的阵列,它已经是dyanmic – sumit

相关问题