2017-05-26 66 views
0

我習慣於使用Volley,當需要一個響應時,但在這裏唯一的方法我可以看到實現我想要的是使用2個響應。這裏的想法:Android Volley,如何獲得響應並在另一個響應中使用它?

郵政username於Android,PHP中的得到匹配user_id,我這樣做:

<?php 

require('dbConnect.php'); 

//this is me, my username in the user table 
$Number = $_POST['phonenumberofuser']; 

// get the username in the user table, then get the matching user_id 
       $query = "SELECT * FROM user WHERE username = ?"; 
       $stmt = $con->prepare($query) or die(mysqli_error($con)); 
       $stmt->bind_param('s', $Number) or die ("MySQLi-stmt binding failed ".$stmt->error); 
       $stmt->execute() or die ("MySQLi-stmt execute failed ".$stmt->error); 
       $result = $stmt->get_result(); 

      while ($row = $result->fetch_assoc()) { 
       //get the corresponding user_id in the row 
      //this is the matching user_id in the user table of the user 
      $user_id = $row["user_id"]; 
      } 

然後在PHP腳本的下一部分,再往下,我想使用該user_id度日user_id創建的評論,就像這樣:

$sql2 = "SELECT * FROM review WHERE user_id = '$user_id'"; 
$results = array(); 

    $result2 = mysqli_query($con,$sql2); 

     //if user_id has reviews in the db 
    while($row = mysqli_fetch_array($result2)) { 
     //make an array called $results 
       $results[] = array(
     'category' => $row['cat_name'], 
     'name' => $row['name'], 
     'phone' => $row['phone'], 
     'comment' => $row['comment'], 
     ); 
    } 
    $json = json_encode($results); 
echo $json; 
     ?> 

正如你可以看到我的PHP文件相呼應,這在我的Android凌空代碼需要照顧,給我的,phonecomment

但我在哪裏把user_id放在我的排球中,這樣我就可以顯示user_id創建的相關評論?

這裏是我的Volley代碼:

// Creating volley request obj 
     JsonArrayRequest movieReq = new JsonArrayRequest(url, 

       new Response.Listener<JSONArray>() { 

        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         hidePDialog(); 

         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           Review review = new Review(); 
           review.setCategory(obj.getString("category")); 

           review.setName(obj.getString("name")); 
           review.setPhone(obj.getString("phone")); 
           review.setComment(obj.getString("comment")); 

           reviewList.add(review); 

          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 

         } 

         // notifying list adapter about data changes 
         // so that it renders the list view with updated data 
         adapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         VolleyLog.d(TAG, "Error: " + error.getMessage()); 
         hidePDialog(); 

        } 
       }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(movieReq); 
    } 
+1

只需創建在'onResponse()'另一個凌空請求onResponse新凌空請求的例子? – Denny

+0

是的,我想到了,但我如何隔離user_id響應,所以我可以使用它返回所需的$ json? – CHarris

+0

我不明白你的意思是隔離。但是我也沒有看到問題所在,你可以解析服務器的json響應。所以我相信你可以檢索user_id並將其用於另一個請求 – Denny

回答

1

將在第一個請求

// change JSONArrayrequest to your appropiate request to get the user id 
JsonArrayRequest userReq = new JsonArrayRequest(URL_TO_GET_USERID, 
    new Response.Listener <JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) {     
      // parse your response to get the user_id 
      String user_id = <RESULT FROM PARSING YOUR RESPONSE>; 
      String URL_WITH_USERID = <YOUR URL> + user_id; 
      JsonArrayRequest movieReq = new JsonArrayRequest(URL_WITH_USERID, 

       new Response.Listener <JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         hidePDialog(); 

         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           Review review = new Review(); 
           review.setCategory(obj.getString("category")); 

           review.setName(obj.getString("name")); 
           review.setPhone(obj.getString("phone")); 
           review.setComment(obj.getString("comment")); 

           reviewList.add(review); 

          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 

         } 

         // notifying list adapter about data changes 
         // so that it renders the list view with updated data 
         adapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         VolleyLog.d(TAG, "Error geting user info: " + error.getMessage()); 
         hidePDialog(); 

        } 
       }); 

      // Adding request for getting user info to request queue 
      AppController.getInstance().addToRequestQueue(movieReq); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error getting user: " + error.getMessage()); 
      hidePDialog(); 
     } 
    }); 

// Adding request for getting user_id to request queue 
AppController.getInstance().addToRequestQueue(userReq); 
+0

還沒有完成它的工作,但你的代碼已經讓我在正確的方向,我敢肯定。 – CHarris