亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

安卓中MVP模式和RxAndroid的具體實現例子

2019-11-09 18:31:54
字體:
來源:轉載
供稿:網友

安卓中MVP模式和RxAndroid的具體實現例子

MVP模式和RxAndroid是兩個東西,這里因為懶得分開寫,所以寫到了一起寫到了同一個例子里面。

MVP是什么


參考博客:框架模式MVP在Android中的使用 在MVC框架中,View是可以直接讀取Model模型中的數據的,Model模型數據發生改變是會通知View數據顯示發生相應的改變。 而在MVP中Model和View之間的沒有任何聯系,是兩個完全獨立的模塊,當Model模型發生數據改變時,通過PResenter通知View視圖發生相應的UI改變。 根據單一職責原則,Activity主要起到用戶交互作用,也就是接收用戶輸入,顯示請求結果。因此可以通過MVP框架模式來減輕Activity的職責。

RxAndroid是什么


Github:ReactiveX/RxAndroid 參考博客:給 Android 開發者的 Rxjava 詳解 RxAndroid可以簡單高度概括為“異步”。 異步操作很關鍵的一點是程序的簡潔性,因為在調度過程比較復雜的情況下,異步代碼經常會既難寫也難被讀懂。Android 創造的 AsyncTask 和Handler ,其實都是為了讓異步代碼更加簡潔。RxJava 的優勢也是簡潔,但它的簡潔的與眾不同之處在于,隨著程序邏輯變得越來越復雜,它依然能夠保持簡潔。

具體例子代碼


對MVP和RxAndroid不了解的可以去上面說的博客去看一下,都是很好的博客,感謝大牛分享! 我這里以最簡單粗暴的方式貼出代碼,建議先上手再研究,先能夠讓程序跑起來,再去研究代碼里面的實現原理。效果圖

引入RxAndroid:在dependencies下面加入如下代碼 最新版本請自己查看Github首頁文檔:ReactiveX/RxAndroid compile ‘io.reactivex:rxandroid:1.0.1’ compile ‘io.reactivex:rxjava:1.0.14’

bean

這里是一個簡單的例子,User只有一個屬性。

package com.regulus.rxandroidtest;public class User {    public String name;    public User(String name) {        this.name = name;    }}123456789123456789

Model

package com.regulus.rxandroidtest;import android.os.SystemClock;import rx.Observable;import rx.Subscriber;public class UserModel {    public Observable<User> getUser() {        return Observable.create(new Observable.OnSubscribe<User>() {            @Override            public void call(Subscriber<? super User> subscriber) {                // 設置個2000ms的延遲,模擬網絡訪問、數據庫操作等等延時操作                SystemClock.sleep(2000);//                final User user = null;                final User user = new User("趙日天");                if (user == null) {                    subscriber.onError(new Exception("User = null"));                } else {                    subscriber.onNext(user);                    subscriber.onCompleted();                }            }        });    }}12345678910111213141516171819202122232425262728291234567891011121314151617181920212223242526272829

View

定義View的接口,把Activity看成View,實現View接口。 Activity只負責監聽點擊等事件,然后反饋給Presenter,由Presenter調度。

package com.regulus.rxandroidtest;public interface UserView {    void updateView(User user);    void showProgressDialog();    void hideProgressDialog();    void showError(String msg);}123456789101112123456789101112
package com.regulus.rxandroidtest;import android.app.ProgressDialog;import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements UserView {    private Context context;    private TextView mTvShow;    private ProgressDialog mProgressDialog;    private UserPresenter mUserPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        context = this;        mUserPresenter = new UserPresenter(this);        mProgressDialog = new ProgressDialog(context);        mProgressDialog.setMessage("正在加載,請稍后..");        mTvShow = (TextView) findViewById(R.id.tv_show);        findViewById(R.id.btn_update).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mUserPresenter.getUser();            }        });    }    @Override    protected void onDestroy() {        if (mProgressDialog != null) {            mProgressDialog.dismiss();        }        super.onDestroy();    }    @Override    public void updateView(User user) {        if (user == null) return;        mTvShow.setText(user.name);    }    @Override    public void showProgressDialog() {        mProgressDialog.show();    }    @Override    public void hideProgressDialog() {        mProgressDialog.hide();    }    @Override    public void showError(String msg) {        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();    }}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Presenter

Presenter相當于MVC中的控制器,負責Model和View的溝通。

package com.regulus.rxandroidtest;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;/** * Presenter作為Model和View通訊的橋梁,需要持有它們的引用。 */public class UserPresenter {    private UserView mUserView;    private UserModel mUserModel;    public UserPresenter(UserView mUserView) {        this.mUserView = mUserView;        mUserModel = new UserModel();    }    public void getUser() {        mUserView.showProgressDialog();        // 這里如果使用 Lambda 會更簡潔        mUserModel.getUser()                .subscribeOn(Schedulers.io())// 在非UI線程中執行getUser                .observeOn(AndroidSchedulers.mainThread())// 在UI線程中執行結果                .subscribe(new Subscriber<User>() {                    @Override                    public void onNext(User user) {                        mUserView.updateView(user);                    }                    @Override                    public void onCompleted() {                        mUserView.hideProgressDialog();                    }                    @Override                    public void onError(Throwable e) {                        mUserView.showError(e.getMessage());                        mUserView.hideProgressDialog();                    }                });    }}123456789101112131415161718192021222324252627282930313233343536373839404142434445123456789101112131415161718192021222324252627282930313233343536373839404142434445

博客大部分都是代碼,文筆實在不好……


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文在线中文网三级| 国产精品爽爽爽爽爽爽在线观看| 日本老师69xxx| 在线精品高清中文字幕| 国产欧美一区二区| 亚洲伦理中文字幕| 91chinesevideo永久地址| 欧美日韩一区二区免费视频| 国产在线拍揄自揄视频不卡99| 九色成人免费视频| 国产97在线亚洲| 欧美激情图片区| 欧美成年人网站| 亚洲白虎美女被爆操| 久久精品99久久久香蕉| www欧美xxxx| 欧美激情一区二区久久久| 日韩www在线| 亚洲成人动漫在线播放| 亚洲国产精品女人久久久| 午夜精品一区二区三区视频免费看| 久久五月天色综合| 中文字幕一区二区精品| 久久久精品国产亚洲| 日韩美女在线播放| 亚洲free嫩bbb| 亚洲精品国产综合久久| 欧美丰满少妇xxxx| 精品亚洲永久免费精品| 久久亚洲成人精品| 97久久精品视频| 裸体女人亚洲精品一区| 亚洲欧美资源在线| 91久久夜色精品国产网站| 中文字幕欧美精品在线| 精品国产网站地址| 久久久久久久久网站| 疯狂蹂躏欧美一区二区精品| 日韩欧美精品中文字幕| 欧美性jizz18性欧美| 亚洲美女激情视频| 国产中文字幕91| 欧美精品久久久久久久久久| 亚洲丁香久久久| 91国偷自产一区二区三区的观看方式| 日韩高清av一区二区三区| 久久久久国产精品免费网站| 在线国产精品视频| 日韩精品视频中文在线观看| 成人看片人aa| 91亚洲精华国产精华| 中文字幕国内精品| 亚洲精品国精品久久99热| 91国产精品视频在线| 国产91在线播放精品91| 国产精品美女免费看| 久久夜色精品亚洲噜噜国产mv| 欧美高清视频在线| 97超碰国产精品女人人人爽| 日韩av电影手机在线观看| 国产亚洲美女精品久久久| 欧美专区福利在线| 在线精品高清中文字幕| 91欧美精品成人综合在线观看| 国产成人avxxxxx在线看| 亚洲片在线资源| 成人免费观看49www在线观看| 欧美日韩亚洲精品一区二区三区| 成人精品视频99在线观看免费| 亚洲欧美综合区自拍另类| 国产日韩欧美在线播放| 日本精品久久电影| 久久艹在线视频| 日韩精品视频免费专区在线播放| 欧美国产一区二区三区| 欧美在线视频一二三| 久久久www成人免费精品张筱雨| 日韩电影中文 亚洲精品乱码| 在线播放日韩专区| 57pao国产成人免费| 欧美亚洲激情在线| 疯狂欧美牲乱大交777| 中文字幕v亚洲ⅴv天堂| 亚洲精品美女久久| 亚洲a区在线视频| 欧美成人午夜激情视频| 热99在线视频| 精品女厕一区二区三区| 97在线免费视频| 精品国产拍在线观看| 国产午夜精品免费一区二区三区| 最近2019年中文视频免费在线观看| 国模精品视频一区二区三区| 午夜精品久久久久久99热软件| 日韩一区二区精品视频| 日韩中文字幕在线视频| 神马久久久久久| 日韩欧美国产骚| 国产精品久久久久久av| 成人黄色片网站| 91久久精品在线| 日韩亚洲欧美中文高清在线| 九九视频直播综合网| 亚洲精品久久久久中文字幕欢迎你| 亚洲精品理论电影| 国产精品视频1区| 久久久久这里只有精品| 亚洲美腿欧美激情另类| 欧美精品少妇videofree| 欧美电影免费观看高清| 富二代精品短视频| 97不卡在线视频| 国产精品看片资源| 日韩精品中文字幕视频在线| 欧美福利视频在线观看| 97在线视频观看| 欧美视频中文字幕在线| 欧美夜福利tv在线| 日韩电影在线观看永久视频免费网站| 成人性生交大片免费观看嘿嘿视频| 久久精品91久久久久久再现| 国产精品偷伦一区二区| 26uuu另类亚洲欧美日本老年| 久久精品夜夜夜夜夜久久| 影音先锋欧美在线资源| 国产亚洲欧洲在线| 欧美日韩亚洲视频| 国产日韩欧美视频| 亚洲一区中文字幕在线观看| 亚洲无限av看| 亚洲黄色有码视频| 一道本无吗dⅴd在线播放一区| 在线视频日韩精品| 欧美精品成人在线| 久久精品视频在线观看| 久久久精品影院| 久久久精品999| 国产精品成人品| 亚洲国产精品va在看黑人| 成人久久一区二区三区| 68精品久久久久久欧美| 国产精品美女999| 欧洲s码亚洲m码精品一区| 91探花福利精品国产自产在线| 日本一区二区在线播放| 高清在线视频日韩欧美| 国产精品你懂得| 亚洲天堂第一页| 美女精品视频一区| 色999日韩欧美国产| 亚洲视频免费一区| 欧美成人午夜免费视在线看片| 欧美激情视频在线免费观看 欧美视频免费一| 狠狠躁夜夜躁人人爽超碰91| 国产极品jizzhd欧美| 国产在线视频不卡| 欧美亚洲第一区| 国产精品综合久久久| 久久久久久久激情视频| 97在线视频观看| 亚洲精品欧美一区二区三区| 一道本无吗dⅴd在线播放一区| 丝袜情趣国产精品| 国产专区欧美专区|