Retrofit +Rxjava使用

2018-06-25  本文已影响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;
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读