1. RxJava & Retrofit 使用
get請求
//一般get請求
@GET("Api/Token/GetToken")
Call<GetToken> getToken(@Query("account") String account,@Query("password") String password);
//get請求加入動態頭
@GET("Api/User/GetListByPage")
Call<GetListByPage> getListByPage(@Header("AccessToken") String token, @Query("pageIndex") int pageIndex, @Query("pageSize") int pageSize);
//固定頭
@Headers("apikey:81bf9da930c7f9825a3c3383f1d8d766")
@GET("Api/User/GetListByPage")
Call<GetListByPage> getListByPage(@Query("pageIndex") int pageIndex, @Query("pageSize") int pageSize);
//動態Url
@GET("Api/Token/{url}")
Call<GetToken> getToken(@Query("account") String account,@Query("password") String password,@Path("url") String url);
post請求
//一般post
@POST("api/Member/Create")
Call<PostResponse> createTask(@Body PostRequestBody postRequestBody, @Header("AccessToken") String token, @Header("moredianToken") String modiantoken);
封裝Retrofit ,封裝業務邏輯, 封裝網絡請求
public static Retrofit getClient(String baseUrl) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
//設置日誌Level
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.connectTimeout(20, TimeUnit.SECONDS);
//添加攔截器到OkHttp,這是最關鍵的
httpClient.addInterceptor(logging);
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient.build())
.build();
}
return retrofit;
}
public static GetTokenService getTokenService() {
return RetrofitClient.getClient(BASE_URL).create(GetTokenService.class);
}
public void getToken(String name, String password, Context context) {
ApiUtils.getTokenService().getToken(name,password).enqueue(new Callback<GetToken>() {
@Override
public void onResponse(Call<GetToken> call, Response<GetToken> response) {
}
@Override
public void onFailure(Call<GetToken> call, Throwable t) {
}
});
}
使用Rxjava
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
@POST("api/Member/Create")
Observable<PostResponse> createTask(@Body PostRequestBody postRequestBody, @Header("AccessToken") String token, @Header("moredianToken") String modiantoken);
public void postCreate(PostRequestBody postRequestBody, String token, String modiantoken){
ApiUtils.postCreateService().createTask(postRequestBody,token,modiantoken)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<PostResponse>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(PostResponse postResponse) {
//請求成功
}
@Override
public void onError(Throwable e) {
//請求失敗
if(e instanceof HttpException){
ResponseBody body = ((HttpException) e).response().errorBody();
try {
JSONObject jsonObject = new JSONObject(body.string());
//手動解析你所需要的信息
} catch (JSONException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
@Override
public void onComplete() {
}
});
}