Как отправить массив в параметрах в залп в Android - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу передать данные, используя залп 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);
}

Я пытался отправить массив в параметрах, но яне добился успеха.Подскажите, пожалуйста, как отправить массив в виде одного параметра в библиотеку залпа.

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Для размещения массива используйте код ниже

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());
0 голосов
/ 13 декабря 2018

Добавьте свой массив в JSONArray и отправьте его с именем ключа

JSONArray dataObject = new JSONArray (filterListing);paramObject.put ( "данные", DataObject);

0 голосов
/ 12 декабря 2018

Использование:

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

}

Использование JJSONArray для отправки значений.

 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 и выполнить итерацию для получения всех значений

...