如何在android中使用RxJava在活动之间传递数据?

2023-11-27

我需要在两个活动之间传递一些数据MainActivity and ChildActivity。按钮点击MainActivity应该打开ChildActivity并发送带有数据的事件。我有单例:

Subject<Object, Object> subject = new SerializedSubject<>(PublishSubject.create());

and in MainActivity我有以下按钮单击处理程序:

    public void onClick(){
        startActivity(new Intent(MainActivity.this, ChildActivity.class));
        subject.onNext(new SomeEvent(data));
    }

和事件侦听器订阅ChildActivity :

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addEventListeners();
    }

    private void addEventListeners() {
        subject.ofType(SomeEvent.class)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io()).subscribe(
                event -> {
                    loadData(event.getData());
                });
    }

当我在开始活动并致电后发送事件时addEventListeners in ChildActivity onCreate仍未订阅此活动并且loadData()不被调用。

使用 RxJava 在活动之间传递数据的正确方法是什么(如果可能的话)?


如果有人需要一个完整的解决方案来使用 RxJava2 在活动之间发送数据

1-创建总线:

public final class RxBus {

private static final BehaviorSubject<Object> behaviorSubject
        = BehaviorSubject.create();


public static BehaviorSubject<Object> getSubject() {
    return behaviorSubject;
}

}

2- 发件人活动

                       //the data to be based
                    MyData  data =getMyData();
                    RxBus.getSubject().onNext(data) ;
                    startActivity(new Intent(MainActivity.this, AnotherAct.class));

3-接收者活动

    disposable = RxBus.getSubject().
            subscribeWith(new DisposableObserver<Object>() {


                @Override
                public void onNext(Object o) {
                    if (o instanceof MyData) {
                   Log.d("tag", (MyData)o.getData();
                    }
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
    });

4-取消订阅以避免内存泄漏:

 @Override
protected void onDestroy() {
    super.onDestroy();
    disposable.dispose();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android中使用RxJava在活动之间传递数据? 的相关文章

随机推荐

  • (opencv) 将轮廓合并在一起

    我正在做一个实时运动检测程序 我发现使用背景减法后 我的不同图像中出现了很多轮廓 我想问是否有任何方法可以将这些轮廓合并在一起或使更大的矩形包含所有轮廓 现在我的案子已经完成了 http singhgaganpreet files word
  • 触摸事件触发两次

    我在移动设备 平板电脑上遇到问题 事件触发两次 当我单击以下功能时 应该下拉的菜单将下拉然后立即向上滑动 这只是触摸设备的问题 document on touchend click lines button function e e sto
  • 如何构造 Apache Commons Lang Range 对象?

    如何创建 Apache Commons Lang 3 1Range
  • Alamofire 请求的多种编码类型

    我需要做一个POST带有 HTTP Body 的请求JSON对象 但我还需要在同一请求中使用 url 查询参数 POST http www example com api create param1 value param2 value H
  • 在angerouslySetInnerHTML中从onclick调用React组件函数

    在这里反应新手 我有一个contenteditablediv 其中有dangerouslySetInnerHTML作为孩子 因为我需要在运行时格式化用户输入的任何内容 在特定范围内单击 HTML 内 我想要setState包含组件的变量之一
  • PyCharm Python 控制台 - 在同一行上打印未按预期工作

    我的目标是通过用当前进度覆盖前一行来在控制台中显示加载进度 我找到了很多针对 Python 3 版本的解决方案 但这些都不起作用 例如 import time for i in range 10 print i end flush True
  • 限制在平板电脑中安装应用程序

    我有一个 Android 应用程序 我想要停止在平板电脑中安装此应用程序 我搜索了很多网站 我得到了一些想法并遵循了 但这不是限制 以下是我访问过的一些网站 Android 清单限制平板电脑 http android developers
  • 从 C# 读取 Gmail 帐户的 Atom feed

    我有一个项目 它将向 Gmail 帐户发送一封包含某些数据的电子邮件 我认为阅读 Atom feed 可能比通过 POP 连接更容易 根据谷歌我应该使用的网址是 https gmail google com gmail feed atom
  • android.app.Application 无法转换为 com.facebook.react.ReactApplication

    我在我的项目中使用了这个命令 react native upgrade 当我尝试构建应用程序时出现错误 android app Application 无法转换为 com facebook react ReactApplication 我真
  • 从深度图像生成点云

    我正在尝试将深度图像 RGBD 转换为 3d 点云 我目前使用的解决方案取自这个帖子 where cx 图像中心高度 cy 图像中心宽度 fx and fy 250 通过迭代几个选项来选择 深度测量是通过针孔相机进行的 点云远离中心投影 示
  • iOS SDK:通过代码将按钮移动到屏幕中央

    我想通过代码将按钮移动到屏幕中央 我在某个地方看到它只是几行代码 但找不到它们 这会将按钮置于其超级视图的中心 CGRect bounds button superview bounds button center CGPointMake
  • CSRF 与 Spring Security 集成时,会话超时导致 Spring MVC 中的访问被拒绝

    我在 Spring MVC 项目中将 CSRF 令牌与 Spring Security 集成 使用 CSRF 令牌一切正常 令牌将从客户端发送到服务器端 我已经改变了我的logout制作过程POST发送 CSRF 令牌的方法及其工作正常 当
  • 调整图像类型“Mat”的大小 opencv C++

    我想调整图像大小 当图像是 IplImage 时 下面的代码可以工作 但是当我将其更改为 Mat 时 我收到以下错误 无法将 cv Mat 深度 从 int cv Mat const 类型转换为 int 类型 无法将参数 1 的 cv Ma
  • 如何从 R 访问维基百科?

    R 是否有任何包允许查询维基百科 最有可能使用 Mediawiki API 来获取与此类查询相关的可用文章列表 以及导入选定的文章以进行文本挖掘 有WikipediR R 中的 MediaWiki API 包装器 library devto
  • 使用 aiohttp 的 Python lib beautiful soup

    有人知道该怎么做 import html5lib import urllib from bs4 import BeautifulSoup soup BeautifulSoup urllib request urlopen http some
  • UWP 导航示例并重点关注控制

    I use UWP 导航示例作为我的应用程序导航的示例 我需要将焦点设置在 TextBox 上 我试穿一下UWP 导航示例 对于 BasicPage 我添加以下代码
  • 无法实例化活动...由 ClassNotFoundException 引起

    将完美工作的应用程序转换为库 包括其 Activity 类 后 我尝试通过简单地超类化库的活动来创建一个使用整个库的应用程序 package com example baseapp paid import android os Bundle
  • 查找数组中不出现两次的整数

    我正在尝试解决这个问题 在整数数组中 除了单个数字只出现一次之外 所有数字都恰好出现两次 一个简单的解决方案是对数组进行排序 然后测试不重复 但我正在寻找时间复杂度为 O n 的更好的解决方案 您可以对整个数组使用 xor 运算 每对数字都
  • 如何在windows中创建路径长度大于256的目录

    我的文件夹路径中有几个级别的目录 当路径超过 256 时 我无法从中创建子文件夹或文件 有没有机会建造超过这个长度的路径 谁能帮我吗 事实上 路径字符串的限制是 260 个字符 如今 底层操作系统可以支持更长的路径名 最多 32 767 个
  • 如何在android中使用RxJava在活动之间传递数据?

    我需要在两个活动之间传递一些数据MainActivity and ChildActivity 按钮点击MainActivity应该打开ChildActivity并发送带有数据的事件 我有单例 Subject