IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Rxjava 的学习和使用 -> 正文阅读

[移动开发]Rxjava 的学习和使用

一:添加依赖
二:被观察者接口
三:被观察者的实现
四:观察接口
五:观察者的实现
六:被观察者和观察者的绑定

一:添加依赖

// 依赖RxAndroid 2X 的依赖库
// 增加RxJava 2X 的依赖库
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.0.7'

二: 被观察者接口

// 抽象层 被观察者
public interface Observable {

// 关注
void addObserver(Observer observer);

// 取消关注
void removeObserver(Observer observer);

// 被观察者发出了改变
void notifyAllObservers();

// 微信公众号的服务 编辑部门 发布一条消息
void pushMessage(String message);

}

三:被观察者的实现

// 被观察者的具体实现
public class WechatServerObservable implements Observable {
private static final String TAG = “lcj WechatServerObservable”;

// 容器 存储 多个  观察者,被观察者身上到底有多少个观察者,用一个集合存储起来
private List<Observer> observers = new ArrayList<>();
private String message; // 被观察者发送消息

@Override
public void addObserver(Observer observer) {
    observers.add(observer);
}

@Override
public void removeObserver(Observer observer) {
    observers.remove(observer);
}

@Override
public void notifyAllObservers() {
    // 遍历容器(容器里都是观察者),通知所有的观察者,去接收被观察者发出的消息
    for (Observer observer : observers) {
        observer.receive(message);
    }
}

@Override
public void pushMessage(String message) {
    this.message = message;
    Log.i(TAG, "pushMessage 被观察者发送了消息,消息内容是:" + message);
    // 通知所有 关注了 此服务号的 用户
    notifyAllObservers();
}

}

四:观察者

//抽象层 观察者
public interface Observer {
// 被观察者改变了/发送消息了,观察者这里可以知道
void receive(Object value);
}

五:观察者的实现

// 观察者 实现

public class UserPerson implements Observer {
private static final String TAG = “lcj UserPerson”;

private String name; // 订阅者的名字

private String message; // 订阅者收到的消息

public UserPerson(String name) {
    this.name = name;
}

@Override
public void receive(Object value) {
    this.message = (String) value;
    Log.i(TAG, "receive name:" + name + " 收到了被观察者推送消息:" + message);
}

}

六:被观察者与观察者的绑定

/**

  • TODO 标准观察者模式
  • todo# 使用场景例子
  •  有一个微信公众号服务,不定时发布一些消息,
    
  •  关注公众号就可以收到推送消息,取消关注就收不到推送消息。
    

*/

public class MainActivity extends AppCompatActivity {
private static final String TAG = “lcj MainActivity”;

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

public static void test() {
    // 公众号 编辑好的文案内容
    String msg = "重大消息:周五就应该有周五的态度";

    // 创建一个微信公众号服务即创建被观察者
    Observable server = new WechatServerObservable();

    // 创建 用户 (观察者)  多个
    Observer observer1 = new UserPerson("订阅者1");
    Observer observer2 = new UserPerson("订阅者2");
    Observer observer3 = new UserPerson("订阅者3");
    Observer observer4 = new UserPerson("订阅者4");

    // 订阅 /绑定 , 被观察者.订阅(观察者) 即server.addObsrver(observer)
    server.addObserver(observer1);
    server.addObserver(observer2);
    server.addObserver(observer3);
    server.addObserver(observer4);

    // 微信平台 发生了 改变
    // server.pushMessage(msg);

    // observer3  取消了关注
    Log.i(TAG, "===========observer3 取消了观察/订阅===================");
    server.removeObserver(observer3);

    // 再次微信平台 发生了 改变
    server.pushMessage(msg);
}

}

最后打印的效果:
I/lcj MainActivity: ====observer3 取消了观察/订阅=
I/lcj WechatServerObservable: pushMessage 被观察者发送了消息,消息内容是:重大消息:周五就应该有周五的态度
I/lcj UserPerson: receive name:订阅者1 收到了被观察者推送消息:重大消息:周五就应该有周五的态度
I/lcj UserPerson: receive name:订阅者2 收到了被观察者推送消息:重大消息:周五就应该有周五的态度
I/lcj UserPerson: receive name:订阅者4 收到了被观察者推送消息:重大消息:周五就应该有周五的态度

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:20:14  更:2022-05-24 18:21:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:53:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码