【问题标题】:Android Volley Json Data Not collectingAndroid Volley Json 数据未收集
【发布时间】:2015-11-24 02:10:21
【问题描述】:

我正在使用 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); 

【问题讨论】:

  • 您能否记录您收到的整个响应并将其粘贴到此处,以检查您收到的 json 格式。

标签: android android-volley


【解决方案1】:

如果您尝试从请求中获取 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
}  

【讨论】:

  • 我已经编辑了我的答案。您应该将参数更改为 POST 。
  • 不,它不工作。它没有获取 json 数组。
  • 令人困惑。你得到你的回应了吗?如果是,那么我认为您得到了实际问题的答案。但如果不是,那么您可以提供您的示例 JSON 响应。因为您没有明确说明您的主要响应是 JsonArray 还是 JsonObject。
  • 不,我没有得到回应。
  • 好的,我已经使用 JsonArrayRequest 编辑了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 2016-11-23
  • 1970-01-01
  • 2021-11-05
  • 2018-12-12
  • 1970-01-01
相关资源
最近更新 更多