Java 从所有活动访问自定义对象的数组/集合,Android

Java 从所有活动访问自定义对象的数组/集合,Android,java,android,arrays,Java,Android,Arrays,我是一个刚刚进入Android Studio的新手,正在开发我的第一个应用程序,这是一种冲浪日志应用程序。基本上,每次用户外出冲浪时,都要跟踪各种天气状况 我创建了一个Java类“会话”,其中包含以下字段: 日期(日期) 位置(字符串) 潮高(浮标) 冲浪尺寸(浮动) 接下来还有更多,暂时保持简单 我的申请流程如下: 将有一个主主屏幕活动,带有按钮,还有一个小的表视图,显示您最近的3个会话。 按钮包括: 新会话:这将带您进入一个新的活动,上面的每个字段都有各种文本输入,一个日期选择器。。。

我是一个刚刚进入Android Studio的新手,正在开发我的第一个应用程序,这是一种冲浪日志应用程序。基本上,每次用户外出冲浪时,都要跟踪各种天气状况

我创建了一个Java类“会话”,其中包含以下字段:

  • 日期(日期)
  • 位置(字符串)
  • 潮高(浮标)
  • 冲浪尺寸(浮动)
  • 接下来还有更多,暂时保持简单
我的申请流程如下:

将有一个主主屏幕活动,带有按钮,还有一个小的表视图,显示您最近的3个会话。 按钮包括:

  • 新会话:这将带您进入一个新的活动,上面的每个字段都有各种文本输入,一个日期选择器。。。还有一个保存按钮
  • 我的会话:这将带您进入tableview,您可以在其中查看过去的所有会话。你可以按地点、日期、冲浪规模来组织它们
因此,我的问题是:

在各种活动之间传递所有这些数据的最佳实践是什么? 对我来说,最明显的方法是在主活动中加载一个中心ArrayList,然后以某种方式传递给所有后续活动。它包含您创建的所有会话

假设我点击主屏幕上的“新建会话”按钮。这将带我进入新的会话活动。我输入所有字段并点击save。我想获取这些数据,创建一个新的会话对象,然后将其添加到主活动中的数组中。到目前为止,我的研究告诉我使用bundle和intent.putextra()技术将所有这些数据传回。然而,它似乎很麻烦。有没有更好的方法可以创建会话类的新对象,然后将其附加到中心数组中

同样,假设我从主活动中点击“我的会话”按钮。我想用这个来加载一个新的活动,它是一个tableview,允许用户滚动他们以前创建的所有会话,点击其中一个来查看详细信息

我做了一些研究,似乎有很多方法可以做到这一点,我读了一些关于单例的文章,我研究了如何创建一些静态类,然后我可以从多个活动中引用它们,我读了关于parcelable和serializable的文章

也许有一些安卓经验的人可以为我提供一些最有效、最标准的方法来完成我想做的事情


我想再次重申,这个数组或“会话”集合将成为应用程序的中心。我实施的几乎每一项活动都将以某种方式使用这些数据。无论是将其显示为可以以不同方式排序的tableview,还是对其运行统计分析,还是在每个位置的地图上显示PIN…

我认为您希望将数据保存在数据库中,并使用发布/订阅工作流来跟踪它

例如,您可以使用。每次应用程序的某个部分进行更新时(即使是不同设备上的不同用户),代码的任何其他部分都可以侦听该更改并捕获它

Firebase只是一个例子,RejectDB、MongoDB都有这个选项


使用应用程序中的数据结构不是一个好的选择:如果需要在应用程序的不同部分之间共享数据结构,它会变得非常混乱,如果需要其他用户知道更改,它将变得不可能。

我认为您应该使用基于事件的库,如RxJava2。您可以轻松订阅一条总线(主题),该总线将发送到目前为止创建的所有数据。以使其他应用程序的组件保持最新

为您指定一个特定的用例。RXjava2中有一个很棒的东西叫做重播主题

重播主题: 无论订户何时订阅,它都会发出源可观测的所有项

一个简单的实现如下所示

 public class RxReplayBus {


private static ReplaySubject<Object> subject = ReplaySubject.create();

private RxReplayBus() {
    // hidden constructor
}


public static Disposable subscribe(@NonNull Consumer<Object> action) {
    return subject.subscribe(action);
}

public static void publish(@NonNull Object message) {
    subject.onNext(message);
  }

}

如果您不想共享数据,甚至可以使用纯内置SQLite。但肯定是某种数据库。每个用户积累的“会话”都是个人的。换句话说,你的日志就是你的日志,只有你的日志。我不想建立一个集体的游泳池。每个用户都有自己的个人数据集。那么提到的客户端SQLite方法@Gabeschen可能是最好的。您可能需要考虑FYI,麻烦的旧日期时间类,例如“代码> java。UTIL.DATE < /C>”现在是遗留的,由类取代。大部分java.time功能都在项目中向后移植到Java6和Java7。进一步适应项目中早期的Android。看到了,很高兴知道,谢谢。我注意到他们不赞成,并正在研究其他选择。我会调查时间的。
  disposable = RxReplayBus.subscribe(new Consumer<Object>() {
        @Override
        public void accept(Object o) throws Exception {


        }
    });
    disposable.dispose();