rxjava2 + retrofit2

第一步 Android studio 项目配置

在build.gradle 中添加以下配置 
compile ‘io.reactivex.rxjava2:rxjava:2.1.1’ 
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ 
compile ‘com.squareup.retrofit2:retrofit:2.3.0’ 
compile ‘com.squareup.retrofit2:converter-gson:2.3.0’ 
complie ‘com.squareup.retrofit2:adapter-rxjava2:2.3.0’ 
complie ‘com.squareup.okhttp3:logging-intereceptor:3.8.0’ 
注意事项 retrofit2.3.0 是基于OKHttp3.8.0 添加 
com.squareuo.okhttp3:logging-intereceptor:3.8.0 
注意版本要一致,否则运行时会失败

第二步 retrofit 注解

注解 retrofit通过使用注解来简化请求,大体分为以下几类:

retrofit通过使用注解来简化请求,大体分为以下几类 
1.用于标注请求方式的注解 
2.用于标记请求头的注解 
3.用于标记请求参数的注解 
4.用于标记请求和响应格式的注解

请求方法注解

注解 说明 

GET get请求 

POST post请求 

PUT put请求 

DELETE delete请求 

PATCH patch请求,该请求是对put请求的补充,用于更新局部资源 

HEAD head请求 

OPTIONS option请求 

HTTP 通用注解,可以替换以上所有的注解,其拥有三个属性:method,path,hasBody

请求头注解

注解 说明 

Headers 用于添加固定请求头,可以同时添加多个。通过该注解添加的请求头不会相互覆盖,而是共同存在 

Header 作为方法的参数传入,用于添加不固定值的Header,该注解会更新已有的请求头

请求参数注解

名称 说明 

Body 多用于post请求发送非表单数据,比如想要以post方式传递json格式数据 

Filed 多用于post请求中表单字段,Filed和FieldMap需要FormUrlEncoded结合使用 

FiledMap 和@Filed作用一致,用于不确定表单参数 

Part 用于表单字段,Part和PartMap与Multipart注解结合使用,适合文件上传的情况 

PartMap 用于表单字段,默认接受的类型是Map<String,REquestBody>,可用于实现多文件上传 

Path 用于url中的占位符 

Query 用于Get中指定参数 

QueryMap 和Query使用类似 

Url 指定请求路径

请求和响应格式注解

名称 说明 

FormUrlEncoded 表示请求发送编码表单数据,每个键值对需要使用@Field注解 

Multipart 表示请求发送multipart数据,需要配合使用@Part 

Streaming 表示响应用字节流的形式返回.如果没使用该注解,默认会把数据全部载入到内存中.该注解在在下载大文件的特别有用

第三步 retrofit 基础类创建

创建请求
public interface RetrofitService {
@POST("Account/Login")
Observable<BaseBean<UserBean>> login(@Body Login login);
@GET("Order/Query")
Observable<BaseBean<ArrayList<OrderBean>>> queryOrder(@Query("page") int page, @Query("pageSize") int pageSize,
@Query("status") int status, @Query("time") String time,
@Query("date") String date, @Query("key") String key,
@Query("token") String token);
}
创建拦截器
     * 创建日志拦截器
*
* @return
*/
private static HttpLoggingInterceptor logInterceptor(){
HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger(){
@Verride
public void log(String message){
Log.e("OKhttp", "log= " + message);
}
});
logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
return logInterceptor;
}
创建OKHttpClient
private static OkHttpClient okHttpClient = new OKHttpClient.Builder()
//添加通用的 Header 拦截器替换原有的COOKIE 可根据需要自行添加不同拦截器
.addInterceptor(new Interceptor(){
@Override
public Response intercept(Chain chain) throws IOException {
//替换原有的COOKIE
Request request = chain.request();
Request.Builder builder = request.newBuilder().removeHeader("COOKIE");
builder.addHeader("COOKIE", cookie)
return chain.procedd(builder.build());
}
.addInterceptor(logInterceptor())
.connectTimeout(30, TimeUint.SECONDS)
.readTimeout(100, TimeUint.SECONDS)
.build();
})
提供retrofit 方法调用
RetrofitService retrofitService = new Rerofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.cilent(okHttpClient)
.build()
.create(RetrofitService.class);

public static RetrofitService getInstance(){
return retrofitService;
}
接口调用
Login login = new Login("name""passWord");
ObserVable<BaserBean<UserBean>> obserVable = RetrofitFactory.getInstance.login(login);
observable.subscribeOn(Schedulers.io())
.filter(userBaseBean -> userBaseBean.isResult())
.map(userBaseBean -> {
Constant.setLogUser(userBeseBean.getData());
    return userBaseBean.getData();
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(userBean ->{
    startActivity(new Intetn(context, MainActivity.class));
})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用RxJava2 + Retrofit2 + OKHttp进行POST请求,可以按照以下步骤进行: 1. 添加依赖 在项目的build.gradle文件中添加以下依赖: ``` dependencies { implementation 'io.reactivex.rxjava2:rxjava:2.2.19' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.1' } ``` 2. 创建Service接口 创建一个接口,用于定义POST请求的方法。例如: ``` public interface ApiService { @POST("login") Observable<LoginResponse> login(@Body LoginRequest request); } ``` 3. 创建Retrofit对象 在Application类或其他初始化类中,创建Retrofit对象: ``` public class MyApp extends Application { private static ApiService apiService; @Override public void onCreate() { super.onCreate(); // 创建OkHttpClient对象 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build(); // 创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://example.com/api/") .client(client) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); apiService = retrofit.create(ApiService.class); } public static ApiService getApiService() { return apiService; } } ``` 4. 发起POST请求 在需要发起POST请求的地方,可以使用以下代码: ``` LoginRequest request = new LoginRequest(); request.setUsername("admin"); request.setPassword("123456"); MyApp.getApiService().login(request) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<LoginResponse>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(LoginResponse response) { // 处理响应数据 } @Override public void onError(Throwable e) { // 处理异常 } @Override public void onComplete() { } }); ``` 上述代码中,我们首先创建了一个LoginRequest对象,用于存储要发送的数据。然后调用MyApp.getApiService().login(request)方法,发起POST请求。在这里,我们使用了RxJava2的Observable对象,将请求结果封装为一个可观察对象。使用subscribeOn(Schedulers.io())指定在IO线程中进行网络请求,使用observeOn(AndroidSchedulers.mainThread())指定在主线程中处理响应。最后通过subscribe方法订阅请求结果,处理响应数据或异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值