将 params.put 中的数组添加到 android 中的 volley 请求

Adding an array in params.put to volley request in android

我正在使用 Volley 与 API 进行交互。我需要向 returns 一个 JSON 数组的服务发送一个 post 请求(带参数)。

我的 Api 代码具有如下功能:

public function Add($tripData) {

    $response = "Unsuccessful";
    if (isset($tripData)) {
        //print_r($tripData);
        $tripsModel = new TasksModel();
        $tripsModel->user_id = $tripData["user_id"];
        $tripsModel->date = $tripData["date"];
        $tripsModel->latitude = $tripData["latitude"];
        $tripsModel->longitude = $tripData["longitude"];
        $tripsModel->location = $tripData["location"];
        $tripsModel->notes = $tripData["notes"];
        $tripsModel->trip = $tripData["trip"];
        $tripsModel->city = $tripData["city"];

        $method = new CommonMethods();
        $response = $method->save("locationdetails", $tripsModel);
    }
    echo json_encode($response);
}

我只需要将 params.put("data", data) 放入以下类型的数组中:

$taskData["user_id"]=2;
$tripData["date"]="2015-06-02 16:01";
$tripData["latitude"]="41.213181";
$tripData["longitude"]="-124.004631";
$tripData["location"]="Redwood National";
$tripData["notes"]="hello";
$tripData["trip"]=3;
$tripData["city"]="California";

以便它可以用作:

$obj = new Myclass;
$var = $obj->Add($tripData);

我已经检查了该服务,但无法使用 hashmap 从 android 代码中 post 它。

private void insertTripData(final String[] tripData) {
    // TODO Auto-generated method stub

    // Tag used to cancel the request
    String tag_string_req = "req_login";

    StringRequest strReq = new StringRequest(Method.POST,
            AppConfig.URL_REGISTER, new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {
                    Log.d("inserttrip",
                            "inserttrip Response: " + response.toString());

                    try {
                        JSONObject jObj = new JSONObject(response);
                        boolean error = jObj.getBoolean("error");

                        // Check for error node in json
                        if (!error) {
                            // user successfully logged in
                            // Create login session

                            // Launch main activity
                            Toast.makeText(getApplicationContext(),
                                    "user data inserted", Toast.LENGTH_LONG)
                                    .show();
                        } else {
                            // Error in login. Get the error message
                            String errorMsg = jObj.getString("error_msg");
                            // String errorMsg =
                            // "Please check your network connection";
                            Toast.makeText(getApplicationContext(),
                                    errorMsg, Toast.LENGTH_LONG).show();
                        }
                    } catch (JSONException e) {
                        // JSON error
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("insertTripError",
                            "Data Error: " + error.getMessage());
                    String errorMsg = "Please check your network connection";
                    Toast.makeText(getApplicationContext(), errorMsg,
                            Toast.LENGTH_LONG).show();

                }
            }) {

        @Override
        protected HashMap<String, String> getParams() {
            // Posting parameters to login url
            JSONObject jsonObject = new JSONObject();
            for (int i = 0; i <= tripData.length; i++) {
                tripData[i] = "questionId_" + i + "_" + "ans_" + i;
                try {
                    jsonObject.put("params_" + i, tripData[i]);
                    
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            String data= jsonObject.toString();
            HashMap<String, String> params = new HashMap<String, String>();
            params.put("tag", "trip");
            params.put("action", "add");
            params.put("data", data);

            return params;
        }

    };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);

}

你说,logcat 中出现 "ArrayIndexOutOfBound" 错误。

可能是您的 getParams() 方法有问题。

将 for 循环更改为:

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

收件人:

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

现在检查,如果您遇到任何其他问题,请在此处显示您的logcat。