如何在具有单个活动和多个片段的ClientServer体系结构中更新Android中的RecyclerViews

如何在具有单个活动和多个片段的ClientServer体系结构中更新Android中的RecyclerViews,android,android-fragments,android-recyclerview,client-server,Android,Android Fragments,Android Recyclerview,Client Server,我想创建一个有客户端和服务器的应用程序(所以基本上它们是两个不同的应用程序)。在每一个客户端(和服务器)中,我使用一个活动多片段方法,在每个应用程序中,我都有一个SQLite数据库。在一些片段中,我使用了RecyclerView。现在,服务器应该能够分别更新每个客户机(和数据库)中的recylerview,反之亦然,这意味着客户机应该能够触发服务器的recyclerView和数据库的更新 现在我的问题是,在安卓系统中,我通常如何做到这一点?我做了一次互联网搜索,经常在不同片段之间的应用程序中进行

我想创建一个有客户端和服务器的应用程序(所以基本上它们是两个不同的应用程序)。在每一个客户端(和服务器)中,我使用一个活动多片段方法,在每个应用程序中,我都有一个SQLite数据库。在一些片段中,我使用了RecyclerView。现在,服务器应该能够分别更新每个客户机(和数据库)中的recylerview,反之亦然,这意味着客户机应该能够触发服务器的recyclerView和数据库的更新

现在我的问题是,在安卓系统中,我通常如何做到这一点?我做了一次互联网搜索,经常在不同片段之间的应用程序中进行交流,使用ViewModel和LiveData方法。现在我想知道,我是否也可以将这些方法用于我的目的?我还发现了一个关于应用程序之间通信的官方Android开发者页面,但这里他们使用的是意图,我认为他们没有使用单活动多片段方法

那么,是否可以使用ViewModel和LiveData方法,或者我必须使用intent方法

更新:我被告知不能将ViewModel或LiveData用于我的目的。你知道我要怎么做吗?因此,客户机应该能够向服务器发送一些信息,服务器应该能够向客户机的数据库发送信息,并基于此,客户机应该更新其Recyclerview。我可以用插座吗

没有人对我如何实现这一点有进一步的想法吗?由于我在这个问题上苦苦挣扎,我将非常感谢您的评论,并非常感谢您的帮助


在这里,您可以看到应用程序架构的大致草图。

事实上,您的问题的答案不适合一个文本,需要包含详细信息的各种文章。所以我刚才提到了一些关于每个部分实现的链接/文章。此外,我试图从更高的角度看待这个问题。然后仔细看看每个部分

我将您的问题分为两部分:

1.基础设施:在客户端和服务器之间通信数据 根据您的评论,这些应用程序不安装在同一台设备上,但它们位于网络中,可以一起ping,并且传递的消息是结构化数据(菜的顺序),您至少有2个选项:

  • 如果应用程序可以访问互联网,我建议使用:
  • Firebase实时数据库是一个云托管数据库。数据是 存储为JSON并实时同步到每个连接的客户端。 当您使用我们的iOS、Android和 JavaScript SDK,所有客户端共享一个实时数据库 实例并自动接收最新数据的更新

    此外,谷歌还提供了一个聊天项目

  • 使用java socket运行socket服务器并连接到它 2.演示:读取数据并更新UI 在实现发送/接收消息之后,我们可以使用
    ViewModel
    并将消息保存在LiveData中。然后在fragment/activity中观察livedata,并在
    RecyclerView
    中显示消息

    谷歌还提供了一些关于这些主题的代码实验室:


    我认为实时数据方法将是最好的方法。因此,每当数据库发生变化时,数据将得到通知,回收视图将得到更新。感谢abdul的评论。由于我对实时数据方法(和模型视图方法)没有任何经验,我想问一下,是否可以将实时数据和模型视图也用于应用程序之间的通信?我也可以只使用LiveData而不使用模型视图吗?是的,您可以使用LiveData而不使用视图模型。感谢Abdul的评论。那么您是否也建议我在不使用viewmodel的情况下使用liveData?因为我认为大多数情况下,它是一起使用的?我可以使用liveData进行客户端和服务器应用程序的通信吗?感谢beigirad提供的答案和链接(我对你的答案投了赞成票)。关于问题1):Firebase DB是一个非SQL数据库,我在我的应用程序中使用SQLite。因此,我不想使用Firebase DB,我宁愿尝试使用套接字。关于问题2):我知道如何使用RecyclerView,但我根本没有使用LiveData和ModelView方法,我认为它们非常复杂,很难学习。因此,我的问题是,是否也可以让RecyclerView在显示片段时每3秒检查一次其本地SQLite数据库,并且根据数据库查询,总是每3秒生成一次RecyclerView。这样做比使用复杂的LiveData方法更容易,但问题可能是由于这些查询,片段的反应可能很慢。是的,你是对的。使用ViewModel和LiveData是一个选项(您可以处理也可以不处理)。我之所以描述它,是因为您在问题和评论中多次提到它们。@VanessaF还使用了db类型(Sql base或NoSql)在这个场景中并不重要。他们都有自己的包装,你不会面对任何低层次的细节。db类型由您决定。感谢beigirad的评论和努力。我真的很感激。那么,根据您的观点,我所描述的每3秒通过查询数据库更新recyclerview的方法(见第2条注释)是可行的解决方案吗?