Retrofit2 学习总结 (二)Rxjava +Retrofit +java web服务器简单小例子

通过一段时间的学习,Rxjava Retrofit2终于算是入了门,学习的过程中写了个简单的小例子,像我这样的人学习东西还是喜欢有一个正确的例子用来学习的。

本demo已经上传到了gitHup:

java服务器 :https://github.com/tanglonghui/Retrofit2Server

安卓客户端:https://github.com/tanglonghui/Retrofit2Study

千山万水总是情,给个star行不行

写篇博客总还是要有点东西的,就贴两个代码地址有点虚,顺便再巩固一下自己所学。

总的来说,这是一篇面向菜鸟的文章,只有菜鸟才知道菜鸟需要什么。

一、环境搭建

安卓:既然要用Rxjava Retrofit2 几个包还是要有的

//retrofit2依赖
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    //rxjava2依赖
    compile 'io.reactivex.rxjava2:rxjava:2.1.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    //听说可以用来解决适配性问题
    compile'com.squareup.retrofit2:adapter-rxjava2:2.2.0'

服务器:

用了三个jar包,前两个是解决文件上传的,后一个大家都知道。

想学么?想学的话就去百度吧,我也不会。

二、Retrofit2 网络请求

打字好累啊,没有耐心与实力的人真可怕。

来大家跟我一起做。

1.搞一个网络请求接口 interface

public interface GetUserService {
    //0.简单的get请求 通过get请求一个User 模仿token验证
    @GET("UserServelt")
    Call<User> getUser(@Header("token") String token);
}

@get :表示get请求 

“Userservelt” :与下文的baseUrl组成一个完整的Url。

Call<User> : Retrofit2标准配置 <>中放你想要的数据格式。

@Header(“token”) :请求头中带一个token

2.搞一个Api

public class Api {
    private static String baseUrl="http://192.168.1.101:8080/Retrofit2Server/";
    /*
     * 同一获得网络请求的接口
     * baserUrl 需按实际情况更改
     */
    public static GetUserService getUserService(){

        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        GetUserService getUserService=retrofit.create(GetUserService.class);

        return getUserService;
    }
}

这个是不是叫封装0。0,反正都是这么做的

3.发起网络请求

   case R.id.button:
                Api.getUserService().getUser("1433227").enqueue(new Callback<User>() {
                    @Override
                    public void onResponse(Call<User> call, Response<User> response) {
                        Toast.makeText(MainActivity.this, "结果" + response.body(), Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onFailure(Call<User> call, Throwable t) {
                        Toast.makeText(MainActivity.this, "结果失败", Toast.LENGTH_SHORT).show();
                    }
                });

                break;

这个是异步请求。

三、Rxjava+Retrofit2网络请求

同样

1.搞一个接口 interface

public interface RxjavaGetService {
    /*
    *  rxjava 用来替换Call的有两个 Flowable 支持背压  Observable 不支持背压 但正常情况下 开销低一些
     *  根据 选择 使用 .subscribe(new Subscriber<User>(){}) 或 .subscribe(new Observer<User>(){}}
     */
    //0.简单的get请求 通过get请求一个User 模仿token验证
    @GET("UserServelt")
    Flowable<User> getUser(@Header("token") String token);//Flowable支持背压
}

也没变多少,就call<User> 换成 Rxjava 给你提空的东东

2.搞一个api

public class Api {
    private static String baseUrl="http://192.168.1.101:8080/Retrofit2Server/";
    /*
     * 同一获得网络请求的接口
     * baserUrl 需按实际情况更改
     */
    public static GetUserService getUserService(){

        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        GetUserService getUserService=retrofit.create(GetUserService.class);

        return getUserService;
    }
    public static RxjavaGetService RxjavaGetService (){
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//Rxjava适配
                .build();
        RxjavaGetService rxjavaGetService=retrofit.create(RxjavaGetService.class);

        return rxjavaGetService;
    }

}

你可以观察一下,其实也没多大差别,就是多了一层Rxjava适配

3.网络请求

case R.id.button:
                //正确返回依次走 124  错误直接进3
                Api.RxjavaGetService().getUser("1433223")
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Subscriber<User>() {
                            @Override
                            public void onSubscribe(Subscription s) {
                               /*
                               吃了英语的亏,大概,感觉是推荐我们用这个值吧
                               大概是设置背压什么的
                                */
                                s.request(Long.MAX_VALUE);
                                Toast.makeText(Main2Activity.this, "1", Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onNext(User user) {
                                //在这里进行返回消息出来
                                Toast.makeText(Main2Activity.this, "2", Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onError(Throwable t) {
                                //错误走这里
                                Toast.makeText(Main2Activity.this, "3", Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onComplete() {
                                Toast.makeText(Main2Activity.this, "4", Toast.LENGTH_SHORT).show();
                            }
                        });
                break;
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())

百度应该知道上面那两个东西是干什么的

一个io的计划,一个主线程运行啥的。。。。。

写点什么就觉得很累,才能不足吧,毕竟自己也才是了解介个是什么,那个是什么,真要解释是什么,脑子里也没有多少货,

CV程序员,

努力不一定成功,但放弃绝对很轻松。

哈哈~~~~

猜你喜欢

转载自blog.csdn.net/qq_40687864/article/details/82656850
今日推荐