RXJava+Retrofit+Mvp搭建

导入依赖
    implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

    // Okhttp库
    implementation 'com.squareup.okhttp3:okhttp:3.1.2'
    // Retrofit库
    implementation 'com.squareup.retrofit2:retrofit:2.0.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
定义一个解析的bean对象
public class TestBean {
    private int errno;
    private String errmsg;
    private data data;

    public int getErrno() {
        return errno;
    }

    public void setErrno(int errno) {
        this.errno = errno;
    }

    public String getErrmsg() {
        return errmsg;
    }

    public void setErrmsg(String errmsg) {
        this.errmsg = errmsg;
    }

    public TestBean.data getData() {
        return data;
    }

    public void setData(TestBean.data data) {
        this.data = data;
    }

    public class data{
        String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}
定义一个接口类,用来设置网络请求方式Get/Post,请求接口,实体类,请求参数。
public interface TestService {
    @POST("sign_machine/index/device_identity")
    Observable getData(@Query("device_uid") String device_uid);
}
定义一个Mvp中的model类
/**
 * Created by Administrator on 2019/2/21.
 * Retrofit + RXJava
 */

public class BaseModel {
    public TestService getTestService() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(API.BASE_URL)//基础URL 建议以 / 结尾
                .addConverterFactory(GsonConverterFactory.create())//设置 Json 转换器
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        TestService service = retrofit.create(TestService.class);

        return service;
    }
}
定义一个Mvp中的presenter类,在类里面定义回调接口,回调数据给View层(包含Activity和xml布局)
public class MainPresenter {
    private MainCallBack callBack;
    private BaseModel model;

    public MainPresenter(MainCallBack callBack) {
        this.callBack = callBack;
        model=new BaseModel();
    }

    public void getNetData(){
        model.getTestService().getData("请求参数")
                .subscribeOn(Schedulers.io())//IO线程加载数据
                .observeOn(AndroidSchedulers.mainThread())//主线程显示数据
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(TestBean testBean) {
                        callBack.getMessage(testBean);
                    }

                    @Override
                    public void onError(Throwable e) {
                        callBack.error();
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }


    public interface MainCallBack {

        void getMessage(TestBean testBean);
        void error();

    }

}
测试
public class MainActivity extends AppCompatActivity implements MainPresenter.MainCallBack {

    Button button;

    private MainPresenter mainPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mainPresenter = new MainPresenter(this);


        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mainPresenter.getNetData();
            }
        });

    }

    @Override
    public void getMessage(TestBean testBean) {
        Toast.makeText(MainActivity.this, testBean.getData().getName(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void error() {
        Toast.makeText(MainActivity.this, "获取数据失败", Toast.LENGTH_SHORT).show();
    }
}

你可能感兴趣的:(RXJava+Retrofit+Mvp搭建)