Получен ноль в ответе при использовании залпа для отправки ArryList на сервер - PullRequest
0 голосов
/ 13 января 2019

Я попытался отправить массив на сервер залпом, но я получил ноль в моем методе ответа Я делаю ArrayList с этим кодом:

final ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String, String>>();

        for (int i = 0; i < questions.size(); i++) {

            //addToServer(questions.get(i),questions.size());

            HashMap<String, String> params = new HashMap<String, String>();
            params.put("TestId", questions.get(i).getTestId() + "");
            params.put("Number", questions.get(i).getNumber() + "");

            arrayList.add(params);
             }

        listOfQ = new JSONArray(arrayList);

и отправьте его на сервер по этому коду:

public void addToServer2() {

    if(requestQueue == null){
        requestQueue = Volley.newRequestQueue(myContext);

    }
    request = new StringRequest(Request.Method.POST, ServiceApi.URL_send_question2, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONArray jsonArray = new JSONArray(response);
            } catch (JSONException e) {
                e.printStackTrace();
            } catch (Exception e) {
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            Map<String, String> params = new HashMap<String, String>();

            params.put("test", listOfQ.toString());
            return params;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            return super.getHeaders();
        }
    };

    requestQueue.add(request);
}

и вот мой php-код, который возвращает массив и возвращает одно значение на сторону Android:

$arr = array();
$jsonarray = array();


$json = $_POST['test'];
$jsonarray = json_decode($json,true);

foreach((array) $jsonarray as $key){

     $TestId = $key["TestId"];
     $arr[] = array('id' => $TestId);
 }

когда я отлаживаю свое приложение, оно показывает мне это в ответ: id: null

1 Ответ

0 голосов
/ 13 января 2019

Я думаю, что вы допустили некоторые ошибки.
Попробуйте таким образом,
1. Создайте объект JSON.
2. Создайте массив JSON и сохраните в нем все данные списка, используя цикл for.
3. Сохраните ваш массив JSON в объект JSON (после цикла for).
4. Поскольку вам нужно будет отправить эти данные в формате json, но в формате String Body, то
String requestBody=your_json_object.toString().
5. Когда вы используете StringRequest, вам нужно отправить URL в строковом формате, и ответ будет в строковом формате.
6. после прослушивателя ошибок вам нужно будет добавить эти строки (в одних фигурных скобках)

{
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }


        @Override
        public byte[] getBody() throws AuthFailureError {
            try {
                return requestBody == null ? null : requestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                return null;
            }
        }

7. Ниже этого метода вам нужно будет добавить параметры заголовка для аутентификации.

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String, String> headers = new HashMap<String, String>();
    headers.put("Content-Type", "multipart/form-data");
    headers.put("Authorization", "sometoken_or_id");
    return headers;
}
  1. requestQueue.add(request);
  2. Выполнено
...