安卓主流框架:mvp+retrofit2

欲练此功,必先了解以下内容:

retrofit2    https://blog.csdn.net/lmj623565791/article/details/51304204

rxjava https://blog.csdn.net/guodashen007/article/details/103349632

再来说MVP: 全称:Model-View-Presenter ;MVP 是从经典的模式 MVC 演变而来,它们的基本思想有相通的地方:Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。

当 View 需要更新时,首先去找 Presenter ,然后 Presenter 找 Model 获取数据,Model 获取到数据之后直接更新 View。

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

网络访问,聚合接口,机器人自动回复

public interface Api {

    @GET("robot/index?info=你好&key=096e85b6bde6fc56b74d8b64066af33c")
    Observable<BaseRespons<Result>> getData();
}

首先定义一个 Contract 契约接口,然后把 Model、View、和 Presenter 的子类分别放入 Contract 的内部,这里的一个 Contract 就对应一个页面(一个 Activity 或者一个 Fragment),放在 Contract 内部是为了让同一个页面的逻辑方法都放在一起,方便查看和修改。Presenter 中的 request3 方法演示了如何通过 Presenter 来进行 View 和 Model 的交互。

接下来要做的就是实现这三个模块的逻辑方法了,在 Activity 或 Fragment 中实现 MainContract .View 的接口,再分别创建两个类用来实现 MainContract .Model 和 MainContract .Presenter,复写里面的抽象方法就好了。

public interface MainContract {
    interface Model{
        Observable<Result> getData();
    }
    interface View{
        void getDataSuccess(Result mResult);
    }
    interface Presenter{
        void getData();
    }

}
public class MainModel implements MainContract.Model{
    //构建Retrofit实例
    Retrofit retrofit = new Retrofit.Builder()
            //设置网络请求BaseUrl地址

            .baseUrl("http://op.juhe.cn/")
            //设置数据解析器
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
           .addConverterFactory(GsonConverterFactory.create())
            .build();

    @Override
    public Observable<Result> getData() {
        return retrofit.create(Api.class).getData().compose(this.<Result>handleResult());

    }

    public  <T> ObservableTransformer<BaseRespons<T>, T> handleResult() {
        return new ObservableTransformer<BaseRespons<T>, T>() {
            @Override
            public ObservableSource<T> apply(Observable<BaseRespons<T>> tObservable) {
                return tObservable.flatMap(
                        new Function<BaseRespons<T>, Observable<T>>() {
                            @Override
                            public Observable<T> apply(BaseRespons<T> tResponseData) throws Exception {
                                //可以相应更改

                                    return Observable.just(tResponseData.getResult());

                            }
                        }
                );
            }

        };
    }
}
public class MainPresenter implements MainContract.Presenter{
    private  MainContract.View view;
    private  MainModel model;

    public MainPresenter(MainContract.View view) {
        this.view = view;
        this.model=new MainModel();
    }

    @Override
    public void getData() {
        model.getData().subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Result>(){
            @Override
            public void onSubscribe(Disposable d) {
                Log.i("MainPresenter", "onSubscribe: ");
            }

            @Override
            public void onNext(Result resultBaseRespons) {
                view.getDataSuccess(resultBaseRespons);
            }

            @Override
            public void onError(Throwable e) {
                Log.i("MainPresenter", e.toString());
            }

            @Override
            public void onComplete() {
                Log.i("MainPresenter", "onComplete");
            }
        });
       }
}

在MainActivity中使用

public class MainActivity extends AppCompatActivity implements MainContract.View{
    private MainPresenter Presenter;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=findViewById(R.id.textView);
        Presenter=new MainPresenter(this);
        Presenter.getData();
    }



    @Override
    public void getDataSuccess(Result mResult) {
        Log.i("getDataSuccess", mResult.toString());
        textView.setText(mResult.toString());
    }
}

demo地址:https://download.csdn.net/download/guodashen007/11996862

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值