Retrofit +Rxjava使用

1.配置权限

   <uses-permission android:name="android.permission.INTERNET"></uses-permission>

2.导入依赖

    implementation 'com.squareup.retrofit2:retrofit:2.3.0'//眼下最新的版本号
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'//加入好这个依赖后我们就能够进行数据转换器的配置了。retrofit内部就会帮我们去转换json字符串为Java对象
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    implementation 'io.reactivex:rxandroid:1.2.0'

3.创建一个接口类

public interface requestRF {
    /**
     * post 请求 没有用rxjava
     * @param username 用户名
     * @param password 密码
     * @return
     */
    @POST("Test/{Login}")
    Call<Login> loadResponse(@Path("Login") String path,@Query("username") String username , @Query("password") String password);

    /**
     * 使用rxjava
     * @param path
     * @param username
     * @param password
     * @return
     */
    @POST("Test/{Login}")
    Observable<Login> loadResponse(@Path("Login") String path, @Query("username") String username , @Query("password") String password);

4.进行网络请求(不使用RXjava)

  Retrofit retrofit = new Retrofit.Builder()
                        //域名
                        .baseUrl("http://" + "ip地址" + ":8080/")
                        //增加返回值为Gson的支持(以实体类返回)
                        .addConverterFactory(GsonConverterFactory.create())
                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava
                        .build();
                requestRF requestRF = retrofit.create(requestRF.class);
Call<Login> call = requestRF.loadResponse("Login","liwei", "1234");
                call.enqueue(new Callback<Login>() {
                    @Override
                    public void onResponse(Call<Login> call, Response<Login> response) {
                        Login login = response.body();
                        Toast.makeText(MainActivity.this,login.getMsg(),Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onFailure(Call<Login> call, Throwable t) {

                    }
                });

5进行网络请求(使用RXjava)

   Retrofit retrofit = new Retrofit.Builder()
                        //域名
                        .baseUrl("http://" + "IP地址" + ":8080/")
                        //增加返回值为Gson的支持(以实体类返回)
                        .addConverterFactory(GsonConverterFactory.create())
                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava
                        .build();
                requestRF requestRF = retrofit.create(requestRF.class);
                Observable<Login> observable = requestRF.loadResponse("Login", "liwei", "1234");
                observable.subscribeOn(Schedulers.io())//请求数据的事件发生在io线程
                        .observeOn(AndroidSchedulers.mainThread())//数据发生在主线程
                        .subscribe(new Observer<Login>() {
                            @Override
                            public void onCompleted() {

                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onNext(Login login) {
                                Toast.makeText(MainActivity.this, login.getMsg(), Toast.LENGTH_SHORT).show();
                            }
                        });//请求完成后在主线程更显UI

  

6.Login类

public class Login {

    /**
     * flag : true
     * msg : 登录成功
     * obj : {"result":"success"}
     * array : ["sss9",null,null,null,null,null,null,null,null,null]
     */

    private String flag;
    private String msg;
    private ObjBean obj;
    private List<String> array;

    public String getFlag() {
        return flag;
    }

    public void setFlag(String flag) {
        this.flag = flag;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public ObjBean getObj() {
        return obj;
    }

    public void setObj(ObjBean obj) {
        this.obj = obj;
    }

    public List<String> getArray() {
        return array;
    }

    public void setArray(List<String> array) {
        this.array = array;
    }

    public static class ObjBean {
        /**
         * result : success
         */

        private String result;

        public String getResult() {
            return result;
        }

        public void setResult(String result) {
            this.result = result;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,337评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,209评论 25 709
  • 我们都知道微信营销要以内容为王,兼顾终端。在这里我们建议向宝网店的店主每次编辑好内容,先发给手机系统是安卓和iOS...
    火迅云阅读 4,143评论 0 0
  • 刚一躺下,就进去了梦境,开启了一场自导自演的剧本。不用背台词。也不用对台词,所有的东西都已安排妥当。 每一个独立的...
    萌龙在天阅读 845评论 0 0
  • Cocoapod是iOS的最常用最有名的类库管理工具。其它的自行百度吧。 如何下载安装呢? 打开Mac 终端输入下...
    莫威權在B612等着那温柔的风阅读 4,900评论 2 10