2017-07-26 26 views
1

我從MySQL的使用PHP API獲取數據和我通過結果與Json_encode到Android,但是當我填充結果到Android的ListView我只得到一個第一行多行。如何分析與jsonOject

這reuslt我越來越對網絡AM: {"error":false,"user":{"paid_amount":"500","parking_duration":"59min","parking_name":"asass"}} {"error":false,"user":{"paid_amount":"100","parking_duration":"22min","parking_name":"SDSDASDAS"}}

PHP部分:

     ........... 
         $usersArr = $db->getDriverHistory($plate_no); 
      if ($usersArr != false) { 
      foreach($usersArr as $key=>$user){ 
      // use is found 
      $response[$key]["error"] = FALSE; 
      $response[$key]["user"]["paid_amount"] = $user["paid_amount"]; 
      $response[$key]["user"]["parking_duration"] = 
      $user["parking_duration"]; 
     $response[$key]["user"]["parking_name"] = $user["parking_name"]; 
     $response = $response[$key] ; 
     // echo json_encode($response), "<br>"; 
     // echo $response;   
      $json = json_encode($response); 
      echo $json,"<br>"; 
      ...... 

的Android代碼:我需要的是讓地方車牌號碼等於一定數目的所有結果,但我只獲取一行而不是所有行。

    private void GetParkingInfo(final String plate_no) { 
       // Tag used to cancel the request 
     String tag_string_req = "req_Verfication"; 

     progressBarList.setVisibility(View.VISIBLE); 
      //  myList.setVisibility(View.GONE); 

     StringRequest strReq = new StringRequest(Request.Method.POST, 
      Urls.URL_driver_parking_information, new 
     Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "cerfication Response: " + response.toString());    
      // Parsing json 
      for (int i = 0; i < response.length(); i++) { 

       try { 

        JSONObject jObj = new JSONObject(response); 
        boolean error = jObj.getBoolean("error"); 
        // Check for error node in json 
        if (!error) { 


         // user successfully exist in database 
         JSONObject user = jObj.getJSONObject("user"); 
         String paid_amount = user.getString("paid_amount"); 
         String parking_duration = 
       user.getString("parking_duration"); 
         String parking_name = user.getString("parking_name"); 
         HashMap<String, String> prodHashMap = new 
        HashMap<String, String>(); 

         prodHashMap.put("paid_amount", paid_amount); 
         prodHashMap.put("parking_duration", parking_duration); 
         prodHashMap.put("parking_name", parking_name); 

         ArrayList<HashMap<String, String>> wordList; 
          wordList = new ArrayList<HashMap<String, String>>(); 
         wordList.add(prodHashMap); 
         userList = wordList ; 
         ShowListData(); 

         progressBarList.setVisibility(View.GONE); 

         } 

         else{ 

         // Error in login. Get the error message 
       //      // hiding the progress bar 
         progressBarList.setVisibility(View.GONE); 
         myList.setVisibility(View.VISIBLE); 
         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(); 
     //      // hiding the progress bar 
        progressBarList.setVisibility(View.GONE); 
        myList.setVisibility(View.VISIBLE); 
        } 
       } 
      } 
       }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Verfication error Error: " + error.getMessage()); 

      Toast.makeText(getApplicationContext(), 
        "response error", Toast.LENGTH_LONG).show(); 
      //    Toast.makeText(getApplicationContext(), 
     //      error.getMessage(), Toast.LENGTH_LONG).show(); 
      // hiding the progress bar 
      progressBarList.setVisibility(View.GONE); 
      myList.setVisibility(View.VISIBLE); 
      } 
      }) { 
      @Override 
      protected Map<String, String> getParams() { 

      // Posting parameters to verfication url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("plate_no", plate_no); 
      return params; 
      } 
     }; 
    //  // Adding request to request queue 

     AppController.getInstance().addToRequestQueue(strReq,tag_string_req); 
     } 
+0

我正在閱讀你的文章,並且我看到很多不清楚的東西和**你爲什麼要'echo $ json「
「;'** :)。好吧,我猜你的JSON數據是數組'']',對嗎?因爲我只看到兩個具有相同結構的js對象...您需要在Android部分的循環之前解析json。最後,請做出一些努力來設置你的代碼的格式:) – codtex

回答

0

你不是隻有一行,而是通過每次迭代創建一個新的ArrayList。你只能以這種方式獲得最後一排。

ArrayList<HashMap<String, String>> wordList; 
         wordList = new ArrayList<HashMap<String, String>>(); 

您需要在您的for循環之外初始化您的列表。

ArrayList<HashMap<String, String>> wordList = new ArrayList<HashMap<String, String>>(); 
for (int i = 0; i < response.length; i++) { 

    // add your information here 
} 

編輯::

我看到發生了什麼。你正在循環String的長度。您需要將您的字符串響應轉換爲JSONArray並通過它進行循環。這樣,你通過每一個的JSONObject陣列

 List<HashMap<String, String>> wordList = new 
      ArrayList<HashMap<String,String>>(); 
     try { 
      JSONArray array = new JSONArray(response); 
      for (int i = 0; i < array.length(); i++) { 
       JSONObject jsonObject = array.getJSONObject(i); 
       // get user // do rest of work 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

編輯在步驟2 ::

這應該讓你去。我沒有測試過,所以請小心任何丟失的括號。

private void GetParkingInfo(final String plate_no) { 
    // Tag used to cancel the request 
    String tag_string_req = "req_Verfication"; 

    progressBarList.setVisibility(View.VISIBLE); 
    //  myList.setVisibility(View.GONE); 

    StringRequest strReq = new StringRequest(Request.Method.POST, 
      Urls.URL_driver_parking_information, new 
      Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 
        Log.d(TAG, "cerfication Response: " + response.toString()); 
        try { 
         JSONArray jsonArray = new JSONArray(response); 
         if (jsonArray != null && !jsonArray.length() > 0) { 
          for (int i = 0; i < jsonArray.length(); i++) { 
           JSONObject jsonObject = jsonArray.getJSONObject(i); 
           if (!jsonObject.isNull("user")) { 
            JSONObject user = jsonObject.getJSONObject("user"); 
            String paid_amount = user.getString("paid_amount"); 
            String parking_duration = 
              user.getString("parking_duration"); 
            String parking_name = user.getString("parking_name"); 
            HashMap<String, String> prodHashMap = new 
              HashMap<String, String>(); 

            prodHashMap.put("paid_amount", paid_amount); 
            prodHashMap.put("parking_duration", parking_duration); 
            prodHashMap.put("parking_name", parking_name); 

            ArrayList<HashMap<String, String>> wordList; 
            wordList = new ArrayList<HashMap<String, String>>(); 
            wordList.add(prodHashMap); 
            userList = wordList ; 
            ShowListData(); 

            progressBarList.setVisibility(View.GONE); 
           } 
          } 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
         Toast.makeText(getApplicationContext(), "Json error: " + 
           e.getMessage(), Toast.LENGTH_LONG).show(); 
         //      // hiding the progress bar 
         progressBarList.setVisibility(View.GONE); 
         myList.setVisibility(View.VISIBLE); 
        } 
       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Verfication error Error: " + error.getMessage()); 

      Toast.makeText(getApplicationContext(), 
        "response error", Toast.LENGTH_LONG).show(); 
      //    Toast.makeText(getApplicationContext(), 
      //      error.getMessage(), Toast.LENGTH_LONG).show(); 
      // hiding the progress bar 
      progressBarList.setVisibility(View.GONE); 
      myList.setVisibility(View.VISIBLE); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() { 

      // Posting parameters to verfication url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("plate_no", plate_no); 
      return params; 
     } 
    }; 
    //  // Adding request to request queue 

    AppController.getInstance().addToRequestQueue(strReq,tag_string_req); 
} 

編輯3 ::

if ($usersArr != false) { 
    foreach($usersArr as $user){ 
     $subresponse["error"] = FALSE; 
     $subresponse["user"]["paid_amount"] = $user["paid_amount"]; 
     $subresponse["user"]["parking_duration"] = $user["parking_duration"]; 
     $subresponse["user"]["parking_name"] = $user["parking_name"]; 
     $response[] = $subresponse; 
     $json = json_encode($response); 

如何,我認爲它應該

if ($usersArr != false) { 
     foreach($usersArr as $user){ 
      $subresponse["error"] = FALSE; 
      $subresponse["user"]["paid_amount"] = $user["paid_amount"]; 
      $subresponse["user"]["parking_duration"] = $user["parking_duration"]; 
      $subresponse["user"]["parking_name"] = $user["parking_name"]; 
      $response[] = $subresponse; 
     } 
     $json = json_encode($response); 
+0

你的這個技巧只是第一行重複自己無限。我想我可以添加ArrayList循環響應,而不是JsonObject –

+0

,它可能是,但不是因爲在網上我有兩行,但是當我使用你的方式或@Reena的用戶方式,我只得到以下第一行重複幾次。我得到︰{{「error」:false,「user」:{「paid_amount」:「500」,「parking_duration」:「59min」,「parking_name」:「asass」}}' –

+0

這似乎不正確。必須有其他事情正在進行。什麼是ShowListData();確切地說呢? – anomeric

0

你初始化集合在錯誤的地方,請各位看看下面的代碼,這可能幫助你

ArrayList<HashMap<String, String>> wordList; 
      wordList = new ArrayList<HashMap<String, String>>(); 

      for (int i = 0; i < response.length(); i++) { 

       try { 

        JSONObject jObj = new JSONObject(response); 
        boolean error = jObj.getBoolean("error"); 
        // Check for error node in json 
        if (!error) { 


         // user successfully exist in database 
         JSONObject user = jObj.getJSONObject("user"); 
         String paid_amount = user.getString("paid_amount"); 
         String parking_duration = 
           user.getString("parking_duration"); 
         String parking_name = user.getString("parking_name"); 
         HashMap<String, String> prodHashMap = new 
           HashMap<String, String>(); 

         prodHashMap.put("paid_amount", paid_amount); 
         prodHashMap.put("parking_duration", parking_duration); 
         prodHashMap.put("parking_name", parking_name); 


         wordList.add(prodHashMap); 
         ; 

         progressBarList.setVisibility(View.GONE); 

        } 

        userList = wordList ; 
        ShowListData() 
+0

用這種方式你的只是第一行重複自己無限。我想我可以添加ArrayList循環響應而不是JsonObject –

0

此解決方案將幫助任何需要的人使用基於where子句的mysql從數據庫中獲取數據到帶有抽象庫的android輸入。

DBHandler它處理PHP函數:

     ..... 
       public function getDriverHistory($plate_no) { 
      $stmt = $this->conn->prepare("SELECT * from drivers_history 
      where drivers_history.plate_no = ?"); 

      $stmt->bind_param("s", $plate_no); 
      if ($stmt->execute()) { 

      // $user = $stmt->get_result()->fetch_assoc();  
      // $stmt->close(); 
      // return $user; 

     $result = $stmt->get_result(); 
      $usersArr = array(); 
     while ($user = $result->fetch_assoc()){ 
     $usersArr[] = $user; 
     } 
      $stmt->close(); 
     return $usersArr; 


     } else { 
     return NULL; 
     } 
     } 
      .... 

GetdriverFunction.php用於訪問上述功能:

         ........... 

      <?php 
       include './DbHandler.php'; 
       $db = new DBHandler(); 
      // json response array 
     $response = array("error" => FALSE); 
      if (isset($_POST['plate_no'])) { 
       // receiving the post params 
       $plate_no = $_POST['plate_no']; 
        $usersArr = $db->getDriverHistory($plate_no); 
       if ($usersArr != false) { 
      $response["error"]= FALSE; 
      $response["user"] = $usersArr; 
     echo json_encode($response); 
       } 
      } 
     ...... 

最後一部分的Java方法來獲取其中plate_no等於什麼plate_no所有結果:

   private void GetParkingInfo(final String plate_no) { 
      // Tag used to cancel the request 
      String tag_string_req = "req_Verfication"; 

    progressBarList.setVisibility(View.VISIBLE); 
     //  myList.setVisibility(View.GONE); 

    StringRequest strReq = new StringRequest(Request.Method.POST, 
     Urls.URL_driver_parking_information, new 
    Response.Listener<String>() { 

    @Override 
    public void onResponse(String response) { 
     Log.d(TAG, "cerfication Response: " + response.toString());    
     // Parsing json 
     JSONArray jsonArrayResult ; 
     for (int i = 0; i < response.length(); i++) { 

      try { 

       JSONObject jObj = new JSONObject(response); 
       boolean error = jObj.getBoolean("error"); 
       // Check for error node in json 
       if (!error) { 


        // user successfully exist in database 

         jsonArrayResult = jObj.getJSONArray("user"); 

       for(int x=0; x<jsonArrayResult.length();x++){ 

        JSONObject json = jsonArrayResult.getJSONObject(x); 


        String paid_amount = json.getString("paid_amount"); 
        String parking_duration = 
      json.getString("parking_duration"); 
        String parking_name = json.getString("parking_name"); 
        HashMap<String, String> prodHashMap = new 
       HashMap<String, String>(); 

        prodHashMap.put("paid_amount", paid_amount); 
        prodHashMap.put("parking_duration", parking_duration); 
        prodHashMap.put("parking_name", parking_name); 

        ArrayList<HashMap<String, String>> wordList; 
         wordList = new ArrayList<HashMap<String, String>>(); 
        wordList.add(prodHashMap); 
        userList = wordList ; 
        } 
        ShowListData(); 

        progressBarList.setVisibility(View.GONE); 

        } 

        else{ 

        // Error in login. Get the error message 
      //      // hiding the progress bar 
        progressBarList.setVisibility(View.GONE); 
        myList.setVisibility(View.VISIBLE); 
        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(); 
    //      // hiding the progress bar 
       progressBarList.setVisibility(View.GONE); 
       myList.setVisibility(View.VISIBLE); 
       } 
      } 
     } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
     Log.e(TAG, "Verfication error Error: " + error.getMessage()); 

     Toast.makeText(getApplicationContext(), 
       "response error", Toast.LENGTH_LONG).show(); 
     //    Toast.makeText(getApplicationContext(), 
    //      error.getMessage(), Toast.LENGTH_LONG).show(); 
     // hiding the progress bar 
     progressBarList.setVisibility(View.GONE); 
     myList.setVisibility(View.VISIBLE); 
     } 
     }) { 
     @Override 
     protected Map<String, String> getParams() { 

     // Posting parameters to verfication url 
     Map<String, String> params = new HashMap<String, String>(); 
     params.put("plate_no", plate_no); 
     return params; 
     } 
    }; 
//  // Adding request to request queue 

    AppController.getInstance().addToRequestQueue(strReq,tag_string_req); 
    }