美文网首页
Retrofit +Rxjava使用

Retrofit +Rxjava使用

作者: 程序猿的小生活 | 来源:发表于2018-06-25 14:32 被阅读34次

    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;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Retrofit +Rxjava使用

          本文链接:https://www.haomeiwen.com/subject/grryyftx.html