如何使用jsonOject解析多行 [英] How to parse multiple rows with jsonOject

查看:102
本文介绍了如何使用jsonOject解析多行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 php API从 mysql 获取数据,并使用Json_encode将结果传递给android,但是当我将结果填充到android listview时,我只会得到第一行

I am fetching data from mysql using php API and i pass results to android with Json_encode but when i populate results to android listview i get only one first row.

这是我在网上获得的重用: {"error":false,"user":{"paid_amount":"500","parking_duration":"59min","parking_name":"asass"}} {"error":false,"user":{"paid_amount":"100","parking_duration":"22min","parking_name":"SDSDASDAS"}}

This is reuslt i am getting on web : {"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代码:我需要的是获得所有结果,其中车牌号等于某个数字,但我只得到一行而不是所有行.

Android code : what i need is to get all results where plate number equals to some number but i am getting only one row instead of all rows .

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

推荐答案

该解决方案将帮助需要使用基于volley库的android输入的where子句从mysql获取数据的任何人.

This solution will help anyone who needds to fetch data from mysql using where clause based to android input with volley library .

处理php函数的DBHandler:

DBHandler which handles php functions :

                     .....
               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用于访问上面的函数:

GetdriverFunction.php used to access function above :

                                      ...........

           <?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 part方法来获取plate_no等于plate_no的所有结果:

finally Java part method to fetch all results where plate_no equals to something 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);
   }   

这篇关于如何使用jsonOject解析多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆