Post 使用改造 2 的数组
Post an array using retrofit 2
我需要 post 一组与会者,如上图所示。我尝试使用 Hashmap 但它给出了一些错误,我不知道它是服务器端错误还是改造。
这是我的代码:
API 界面
@FormUrlEncoded
@POST("vendor/event/{id}/checkin")
Call<DefaultResponse> updateAttendance(
@Path("id") int id,
@QueryMap Map<String,String> attendees,
@Field("token") String token);
回应class
String message;
public DefaultResponse(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
这是我的 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();
}
});
}
我做的每件事都正确吗?
我收到请求代码 400(错误请求)
您的参数不正确,这就是您收到 400 错误的原因。像下面这样尝试
要求:
@FormUrlEncoded
@POST("vendor/event/{id}/checkin")
Call<DefaultResponse> updateAttendance(
@Path("id") int id,
@Field("attendees") String attendees,
@Field("token") String token);
Api 调用:
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();
}
});
}
我需要 post 一组与会者,如上图所示。我尝试使用 Hashmap 但它给出了一些错误,我不知道它是服务器端错误还是改造。 这是我的代码:
API 界面
@FormUrlEncoded
@POST("vendor/event/{id}/checkin")
Call<DefaultResponse> updateAttendance(
@Path("id") int id,
@QueryMap Map<String,String> attendees,
@Field("token") String token);
回应class
String message;
public DefaultResponse(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
这是我的 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();
}
});
}
我做的每件事都正确吗? 我收到请求代码 400(错误请求)
您的参数不正确,这就是您收到 400 错误的原因。像下面这样尝试
要求:
@FormUrlEncoded
@POST("vendor/event/{id}/checkin")
Call<DefaultResponse> updateAttendance(
@Path("id") int id,
@Field("attendees") String attendees,
@Field("token") String token);
Api 调用:
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();
}
});
}