依赖:
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.okhttp3:okhttp:3.4.2'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.okhttp3:okhttp:3.4.2'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
1.
public class RetrofitManager { //基地址 public static final String BASE_URL = "基地址";//比如http://105.55.525.25:8080 //单例 private static RetrofitManager instance; private Retrofit retrofit; private RetrofitManager() { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL)//网络请求的地址 .addConverterFactory(GsonConverterFactory.create())//数据解析器 .build(); } public static RetrofitManager getInstance() { if (instance == null) { instance = new RetrofitManager(); } return instance; } public Retrofit getRetrofit() { return retrofit; } }
2.interfase一个类,方便你随时拿,这里有三种请求方式,get、post请求数据、post上传文件:
public interface DataServer { //地址里不用再把基地址也写进去,因为你前面 //单例RetrofitManigar的时候已经加进去里,这里的地址直接加上后面的就行 //比如你地址是:https://105.55.525.25:8080/........ //那你直接把8080后面的 /........复制到你的进去就行 //get请求 //比如@GET("/........") @GET("地址") Call<WXMode> getaccessToken(@Query("appid") String appid, @Query("secret") String secret, @Query("code") String code, @Query("grant_type") String grant_type); //post请求数据 //比如@POST("/........") @POST("地址") @FormUrlEncoded Call<User> getuser(@Field("nickName") String nickName, @Field("sex") int sex, @Field("headImg") String headImg, @Field("uniqueCode") String uniqueCode, @Field("userSource") int userSource); //Post上传文件 //比如@POST("/........") @POST("地址") @Multipart Call<BaseModel> changeUserHeadImg(@Part("token") RequestBody token, @Part MultipartBody.Part file); }
3.使用get请求:
private void getByOkhttp(final String code) { Retrofit retrofit = RetrofitManager.getInstance().getRetrofit(); Call<WXMode> call = retrofit.create(DataServer.class).getaccessToken(APP_ID, WX_APP_SECRET, code, Authorization_Code); call.enqueue(new Callback<WXMode>() { @Override public void onResponse(Call<WXMode> call, retrofit2.Response<WXMode> response) { //请求成功返回的数据,也可以在这里做请求成功之后想做的事情 String accessToken = response.body().getAccess_token(); String openId = response.body().getOpenid(); GetUserInfo(accessToken, openId);//获取用户信息 } @Override public void onFailure(Call<WXMode> call, Throwable t) { //返回的错误信息 Toast.makeText(WXEntryActivity.this, t.getMessage().toString(),Toast.LENGTH_SHORT).show(); } }); }
4.Post请求数据:
private void loginByQQOpenId(String nick, int sex, String headImg, String uniqueCode, int userSource) { Retrofit retrofit = RetrofitManager.getInstance().getRetrofit(); Call<User> getuser = retrofit.create(DataServer.class).getuser(nick, sex, headImg, uniqueCode, userSource); getuser.enqueue(new retrofit2.Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { //请求成功返回的信息 if (response.body().getStatus() == 200) {//.getStatus()是文档接口返回示例的内容 //在这里做你请求成功之后想做的事情,这里也会返回数据,用response.body去.能拿到 } else { } } @Override public void onFailure(Call<User> call, Throwable t) { //请求错误返回的信息 Toast.makeText(LoginActivity.this, t.getMessage().toString(),Toast.LENGTH_SHORT).show(); } }); }
5.Post上传文件:
private void updataPic(String urifile) { Retrofit retrofit = RetrofitManager.getInstance().getRetrofit(); //1.token RequestBody token = RequestBody.create(MediaType.parse("application/json"), app.getToken());//application/json是格式 //2.文件 File file = new File(urifile); final RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);//multipart/form-data是格式 MultipartBody.Part filePart = MultipartBody.Part.createFormData("img", file.getName(), requestFile);//img是接口文档给你的参数名 Call<BaseModel> call = retrofit.create(DataServer.class).changeUserHeadImg(token, filePart); call.enqueue(new Callback<BaseModel>() { @Override public void onResponse(Call<BaseModel> call, Response<BaseModel> response) { //请求成功 if (response.body().getStatus() == 200) {//.getStatus()是文档接口返回示例的内容 //在这里做你请求成功之后想做的事情,这里也会返回数据,用response.body去.能拿到 } else { Toast.makeText(EditDataActivity.this, response.body().getMessage(),Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<BaseModel> call, Throwable t) { //请求错误返回的信息 Toast.makeText(EditDataActivity.this, t.getMessage().toString(),Toast.LENGTH_SHORT).show(); } }); }
6.这里用的三个mode都是接口文档返回的示例,你mode里是什么有什么,请求成功后返回的数据就有什么。比如我最后一个mode:BaseMode:
public class BaseModel { /** * message : 请求成功 * status : 200 * code : 0 * currentTime : 1525406383649 */ private String message; private int status; private String code; private long currentTime; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public long getCurrentTime() { return currentTime; } public void setCurrentTime(long currentTime) { this.currentTime = currentTime; } }
那我请求后台成功的话,response.body就能.getState,能.getCurrentTime...