简体   繁体   中英

Post an array using retrofit 2

在此处输入图片说明

I need to post an array of attendees as shown in the image above. I tried using Hashmap but it gives some errors and I don't know if it is server-side error or retrofit. Here is my code :

API interface

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

Response class

String message;

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

    public String getMessage() {
        return message;
    }

And here is the code of my Activity

    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();
            }
        });
      }

Am I doing everything in the right way? I get request code 400(bad request)

You params are not correct that's why you getting 400 error. try like below

Request :

@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();
            }
        });
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM