【问题标题】:How to send array in params in volley in android如何在 android 的 volley 中以 params 发送数组
【发布时间】:2019-05-13 11:16:20
【问题描述】:

我想使用 volley API 将数据传递给服务器。参数如下:

Request:
{
    "user_id" : 6,
    "package_name": "Personal Package",
    "care_type" : ["help in shopping", "Personal care"],
    "care_delivered" : "as day care",
    "gender" : "F",
    "experience" : "4,0",
    "skills":"very helpful , caring, etc",
    "start_date" : "2018-09-12",
    "price": "200-700, day",
    "description": "test"
}

在此care_type 是一个数组类型。我已经完成了发送数据的代码,但每次我收到错误,即

onErrorResponse: Error: org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject

我的 API 代码是:

 private void createPackageApi() {
    String tag_json_obj = "json_obj_req";
    String url = Constants.CREATE_PACKAGE;


    pBar.setVisibility(View.VISIBLE);
    Activity activity = getActivity();
    if (activity != null && isAdded()) {
        sessionManager = new SessionManager(activity);
    }


    final HashMap<String, String> packageDetail = sessionManager.getPackageDetail();
    JSONArray jsonArray;

    try {
        jsonArray = new JSONArray(required_support_need);
        strArr = new String[jsonArray.length()];

        Log.e("tag", "package" + required_support_need + " " + strArr);
        for (int i = 0; i < jsonArray.length(); i++) {
            strArr[i] = "\"" + jsonArray.getString(i) + "\"";
            Log.e("TAG", "getInitializedID:String " + strArr[i]);
        }


    } catch (Exception e) {

        e.printStackTrace();
    }


    final HashMap<String, String> registrationDetail = sessionManager.getSeekerRegistrationDetail();
    HashMap<String, String> params = new HashMap<String, String>();


    params.put("user_id", "2");
    params.put("package_name", edtPackageNames.getText().toString());
    params.put("care_type", Arrays.toString(strArr));
    params.put("care_delivered", edtCarePackages.getText().toString());
    params.put("gender", edtPreferredGender.getText().toString());
    params.put("experience", edtPackageNames.getText().toString());
    params.put("skills", edtEssentialSkills.getText().toString());
    params.put("start_date", packageDetail.get("start_date"));
    params.put("price", edtPackageValue.getText().toString());
    params.put("description", edtPackageDescription.getText().toString());


    Log.e("TAG", "seekerPackage: " + params);


    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
            url, new JSONObject(params),
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {

                    Log.e("package_detail_response", response.toString());

                    Gson gson = new Gson();
                    try {
                        if (response.has("success")) {

                            CreatePackage createPackage;
                            createPackage = gson.fromJson(response.toString(), CreatePackage.class);

                            String status = createPackage.getSuccess();

                            if (status.equals("success")) {
                                Activity activity = getActivity();
                                if (activity != null && isAdded()) {
                                    Toast.makeText(getActivity(), R.string.package_created, Toast.LENGTH_LONG).show();
                                }
                            }

                            pBar.setVisibility(View.GONE);

                        } else {


                            ResponseError responseError;
                            responseError = gson.fromJson(response.toString(), ResponseError.class);

                            String msg = responseError.getMessage();
                            Log.e("TAG", "msg " + msg);
                            Activity activity = getActivity();
                            if (activity != null && isAdded()) {
                                Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
                            }
                        }


                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                    pBar.setVisibility(View.GONE);
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            pBar.setVisibility(View.GONE);
            VolleyLog.e("Error: " + error.getMessage());
            // handle error
        }
    }) {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json; charset=UTF-8");
            headers.put("Authorization", "Bearer " + registrationDetail.get("api_token"));
            return headers;
        }
    };


    jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
            100000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


    AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
}

我尝试在参数中发送数组,但没有成功。请告诉我如何在 volley 库中以单个参数发送数组。

【问题讨论】:

    标签: android android-studio android-layout android-fragments android-volley


    【解决方案1】:

    要发布数组,请使用以下代码

    JSONArray care_type = new JSONArray();
    for(int i=0; i < yourarray.length(); i++) {
        care_type.put(yourarray[i]);   // create array and add items into that 
    }
    params.put("care_type",care_type.toString());
    

    【讨论】:

    • 仍然出现 smae 错误。此代码中的列表是什么。
    • 是的,我在其中使用了 strArr,但仍然出现同样的错误。
    • 是的,我已转换,但在服务器端 php 开发人员为其分配了数组类型。
    • 我检查了两者是否相同
    • {price=400-1000,hour, description=, Skills=dguj, care_delivered=as live-in care, start_date=2018-12-29, care_type=["Personal Care","Companionship ","帮助日常生活","帮助行动","痴呆症护理"], gender=F, user_id=4, experience=fguuh, package_name=fguuh}
    【解决方案2】:

    在 JSONArray 中添加您的数组并使用键名将其发送到

    JSONArray dataObject = new JSONArray(filterListing); paramObject.put("data",dataObject);

    【讨论】:

      【解决方案3】:

      使用:

      HashMap<String ,String> params=new HashMap<String, String>();
      for(int i=1;i<=parms.size;i++){
         params.put("params_"+i, arr[i]);
      

      }

      使用 JJSONArray 发送 Values 。

       JSONArray jsonObject=new JSONArray();
       for(int i=1;i<=size;i++)
       {
          arr[i]="userId_"+i+"_"+"ans_"+i;
          jsonObject.put("params_"+i,arr[i]);
       }
      
      HashMap<String ,String> params=new HashMap<String, String>();
      params.put("params",jsonObject.toString());
      

      在服务器端发送所有值获取参数并转换为 JSON 对象并迭代以获取所有值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 2015-07-21
        • 1970-01-01
        相关资源
        最近更新 更多