一、新建一个retrofit的接口文件
因为请求的content-type是multipart/form-data,所以接口的注解加上@Multipart,参数也要加上@Part。这个最开始不理解,用成了@FormUrlEncoded,导致一直请求失败。
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
public interface RequestApi {
@POST("user/get_mac/")
@Multipart
Call<ServerResponse> getPostData(@Part("address") RequestBody address);
}
二、新建一个json和java对象的转换类
import java.util.List;
public class ServerResponse {
public int code;
public String msg;
public String time;
public data data;
public static class data {
public long expire;
public String wifi;
public String wifi_pwd;
public String content;
public String code;
public String publicize;
public Image images[];
public static class Image {
public String url;
public String code;
}
public Item item[];
public static class Item {
public String title;
public String app_title;
public String download_url;
public String image;
}
}
@Override
public String toString() {
int i,j;
String str = "response{" +
"code=" + code +
",msg=" + msg +
",time=" + time +
",data{" + "expire=" + data.expire +
",wifi=" + data.wifi +
",wifi_pwd=" + data.wifi_pwd +
",content=" + data.content +
",code=" + data.code +
",publicize" + data.publicize +
",images{";
for (i = 0; i < data.images.length; i++) {
str += "{" + data.images[i].url + "},";
}
str += "},item{";
for (j = 0; j < data.item.length; j++) {
str += "{title=" + data.item[j].title +
",app_title=" + data.item[j].app_title +
",download_url" + data.item[j].download_url +
",image=" + data.item[j].image + "},";
}
str += "}";
return str;
}
}
三、发起POST请求
public void request() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(GlobalConstant.BASE_URL + "/")
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestApi request = retrofit.create(RequestApi.class);
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),macAddr);
Call<ServerResponse> call = request.getPostData(requestBody);
call.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
System.out.println("连接成功!");
System.out.println(response.body().toString());
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
System.out.println("连接失败!");
}
});
}