首页 文章

在params.put中添加一个数组到android中的volley请求

提问于
浏览
0

我正在使用Volley与API进行交互 . 我需要向返回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代码发布它 .

private void insertTripData(final String [] tripData){// TODO自动生成的方法存根

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

}

1 回答

  • 0

    你说过,你的logcat中出现“ArrayIndexOutOfBound”错误 .

    可能是你的getParams()方法有问题 .

    更改for循环:

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

    至:

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

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

相关问题