Опубликовать массив с использованием дооснащения 2 - PullRequest
1 голос
/ 29 января 2020

enter image description here

Мне нужно опубликовать массив участников, как показано на рисунке выше. Я попытался использовать Hashmap, но он дает некоторые ошибки, и я не знаю, является ли это ошибкой на стороне сервера или модернизацией. Вот мой код:

Интерфейс API

    @FormUrlEncoded
    @POST("vendor/event/{id}/checkin")
    Call<DefaultResponse> updateAttendance(
            @Path("id") int id,
            @QueryMap Map<String,String> attendees,
            @Field("token") String token);

Класс ответа

String message;

    public DefaultResponse(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

А вот код моей активности

    final Map<String,String> attendees = new HashMap<>();
    for (int i = 0; i < attendeesTables.size(); i++){
            attendees.put("id", String.valueOf(attendeesTables.get(i).getId()));
            attendees.put("arrival_time", 
            attendeesTables.get(i).getArrival_time());
         }
    if (attendeesTables.size() > 0) {
            Call<DefaultResponse> call = RetrofitClient.getmInstance().getApi().updateAttendance(event_id,attendees,token);
            call.enqueue(new Callback<DefaultResponse>() {

        @Override
        public void onResponse(Call<DefaultResponse> call, Response<DefaultResponse> response) {
            Toast.makeText(EventsDetailsActivity.this, response.code()+"", Toast.LENGTH_SHORT).show();
            Toast.makeText(EventsDetailsActivity.this, response.isSuccessful()+"", Toast.LENGTH_SHORT).show();
          }

        @Override
        public void onFailure(Call<DefaultResponse> call, Throwable t) {
            Toast.makeText(EventsDetailsActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
      }

Я делаю все правильно? Я получаю код запроса 400 (неверный запрос)

1 Ответ

1 голос
/ 30 января 2020

Ваши параметры неверны, поэтому вы получаете 400 ошибок. попробуйте как ниже

Запрос:

@FormUrlEncoded
@POST("vendor/event/{id}/checkin")
Call<DefaultResponse> updateAttendance(
        @Path("id") int id,
        @Field("attendees") String attendees,
        @Field("token") String token);

Api Call:

    JSONArray attendeesArray=new JSONArray();
    for (int i = 0; i < attendeesTables.size(); i++){
        JSONObject jsonObject=new JSONObject();
        jsonObject.put("id",String.valueOf(attendeesTables.get(i).getId()));
        jsonObject.put("arrival_time",String.valueOf(attendeesTables.get(i).getArrival_time()));
        attendeesArray.put(jsonObject);
    }

    if (attendeesTables.size() > 0) {
        Call<DefaultResponse> call = RetrofitClient.getmInstance().getApi().updateAttendance(event_id,attendeesArray.toString(),token);
        call.enqueue(new Callback<DefaultResponse>() {

            @Override
            public void onResponse(Call<DefaultResponse> call, Response<DefaultResponse> response) {
                Toast.makeText(EventsDetailsActivity.this, response.code()+"", Toast.LENGTH_SHORT).show();
                Toast.makeText(EventsDetailsActivity.this, response.isSuccessful()+"", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<DefaultResponse> call, Throwable t) {
                Toast.makeText(EventsDetailsActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }
...