Retrofit+RxJava学习笔记(1)

最近做项目发现,项目的上传图片功能有问题

各种输入流,输出流的操作。博主看着都头疼。

于是决定换个网络框架上传。于是就选择了Retrofit(+RxJava)


先用登陆练个手


Retrofit:


第一步:创建Retrofit实例

BaseURL是你请求的基地址

//创建Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(URL.BaseURL)
        .addConverterFactory(GsonConverterFactory.create())//配置gson转换
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//配置rxjava转换
        .build();


第二步:定义接口(这里是配合RxJava使用,所以返回的是Observable)

泛型是返回json对应的JavaBean

@GET注解表示请求方式(get请求)

括号中的是接口链接(这里我写死了一个参数OSType(拼接键值对),也可以放到login的参数中)

这个接口需要三个参数:userName,userPwd,OSType

使用@Query注解可以避免拼接参数(OSType),你只需传入指定参数即可

@Query后面跟的字符串就是接口对应的字段(注意不要打错!!!!复制,粘贴!!!!)

public interface RetrofitService {
	//http://192.168.1.181:8083/zsfcsmss/
	@GET("appHnt/AppLogin?OSType=2")
	Observable<UserInfoData1> login(@Query("userName") String userName, @Query("userPwd") String passWord);
}


第三步:创建接口实例

//创建接口实例
RetrofitService retrofitService = retrofit.create(RetrofitService.class);

第四步:发起请求(调用接口中的方法)

配合Rxjava使用

1.指定订阅线程

2.订阅观察者

请求成功会回掉onNext()方法,失败则回掉onError

retrofitService.login(username, password)
        .subscribeOn(Schedulers.newThread())//指定事件订阅在IO线程
        .subscribe(new Observer<UserInfoData1>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                //检查网络状态
                if (!NetworkUtils.isConnected(LoginActivity.this)) {

                }
            }

            @Override
            public void onNext(@NonNull UserInfoData1 userInfoData) {
                Log.e(TAG, "onNext");
                
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.e(TAG, "onError");
            }

            @Override
            public void onComplete() {
                Log.e(TAG, "onComplete");

            }
        });



RxJava:

使用RxJava要先弄清楚几个概念:

1.Observable(被观察者)

2.Observer(观察者)

3.subscribe(订阅)

4.Event(事件)

Observable(被观察者)通过subscribe(订阅)Observer(观察者)

即被观察者通过订阅(动作)观察者,和观察者产生联系

下图可以看出:

1.发生了登陆事件(login)>>>>>>>>>>>>>>Event(事件)

2.登陆方法返回了一个被观察者 >>>>>>>>>>>>>>Observable(被观察者)

3.被观察者通过subscribe方法订阅了观察者>>>>>>>>>>>>>>subscribe(订阅),Observer(观察者)

Retrofit+RxJava学习笔记(1)



使用Rxjava怎么能少了链式编程呢?


new Retrofit.Builder()
        .baseUrl(URL.BaseURL)
        .addConverterFactory(GsonConverterFactory.create())//配置gson转换
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//配置rxjava转换
        .build()
        .create(RetrofitService.class)
        .login(username, password)
        .subscribeOn(Schedulers.newThread())//指定事件订阅在IO线程
        .subscribe(new Observer<UserInfoData1>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                //检查网络状态
                if (!NetworkUtils.isConnected(LoginActivity.this)) {

                }
            }

            @Override
            public void onNext(@NonNull UserInfoData1 userInfoData) {
                Log.e(TAG, "onNext");
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.e(TAG, "onError");
            }

            @Override
            public void onComplete() {
                Log.e(TAG, "onComplete");

            }
        });


是不是觉得代码很清爽?那你还等什么?赶紧去学RxJava啊!!!!!!!!!!!