2015-11-23 45 views
0

我使用凌空抽取Json數據,但它似乎不工作。該代碼完全適合我。 的Android代碼:Android Volley Json數據不收集

public void search() { 

    final String search_string = et_Search.getText().toString(); 

    PD.setMessage("Searching: " + search_string); 

    PD.show(); 

    String search_url = ""; 

    StringRequest postRequest = new StringRequest(Request.Method.POST, search_url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject jsonResponse = new JSONObject(response); 

         int success = jsonResponse.getInt("success"); 
         String message = jsonResponse.getString("message"); 

         JSONArray ja = jsonResponse.getJSONArray("restaurants"); 

         if (ja != null) { 

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

           JSONObject jsonobject = ja.getJSONObject(i); 
           HashMap<String, String> item = new HashMap<String, String>(); 
           item.put(TITLE, jsonobject.getString(TITLE)); 
           item.put(LOCATION, jsonobject.getString(LOCATION)); 

           List.add(item); 
          } // for loop ends 

          String[] from = {TITLE, LOCATION}; 
          int[] to = {R.id.item_name, R.id.item_location}; 

          adapter = new SimpleAdapter(
            getActivity().getApplicationContext(), List, 
            R.layout.list_items, from, to); 

          listView.setAdapter(adapter); 

         }else{ 
          Toast.makeText(getActivity().getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 
         } 

         PD.dismiss(); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        error.printStackTrace(); 
        PD.dismiss(); 
        Toast.makeText(getActivity().getApplicationContext(), 
          "Failed, Check Your Connection", Toast.LENGTH_SHORT).show(); 
       } 
      } 
    ) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<>(); 
      // the POST parameters: 
      params.put("search_string", search_string); 
      return params; 
     } 
    }; 

    // Adding request to request queue 
    Volley.newRequestQueue(getActivity()).add(postRequest); 
} 

所以現在是服務器端代碼:它從MySQL獲取數據,JSON編碼完全正常工作......

$search_string = $_POST["search_string"]; 

// include db connect class 
require_once __DIR__ . '/db_connect.php'; 

// connecting to db 
$db = new DB_CONNECT(); 

// get all restaurants from products table 
$result = mysql_query("SELECT T1.name, T2.address FROM tbl_restaurant T1 INNER JOIN tbl_information T2 ON T1.restaurant_id = T2.restaurant_id WHERE T1.name LIKE '%$search_string%'") or die(mysql_error()); 

// check for empty result 
if (mysql_num_rows($result) > 0) { 
    // looping through all results 
    // restaurants node 
    $response["restaurants"] = array(); 

    while ($row = mysql_fetch_array($result)) { 
     // temp user array 
     $rest_array = array(); 

     $rest_array["name"] = $row["name"]; 
     $rest_array["address"] = $row["address"]; 

     // push single restaurant into final response array 
     array_push($response["restaurants"], $rest_array); 
    } 
    // success 
    $response["success"] = 1; 

    // echoing JSON response 
    echo json_encode($response); 

回答

0

如果您想獲得JSON數據出來的您的要求,那麼您應該製作JSONArrayRequest而不是StringRequest。所以你的要求應該是這樣的 -

JSONArrayRequest arrayReq = new JSONArrayRequest(Method.POST, search_url, null, 
      new Response.Listener<JSONArray>() { 
      @Override 
       public void onResponse(JSONArray response) { 
        // It will return a JSON Array 
        Log.d(TAG, response.toString()); 
       } 
      }, 
      // Rest of your code 
} 
+0

對不起,它是一種Post方法,我編輯了這個。 – mhtamun

+0

我編輯了我的答案。那麼你應該把參數改爲POST。 –

+0

不,它不工作。它沒有獲取json數組。 – mhtamun