存储用户数据并允许用户从公共列表中添加数据

时间:2016-07-06 20:31:44

标签: android firebase firebase-realtime-database

我正在创建一个应用程序,允许用户从特定位置的多个来源获取weatherdata。

我面临的问题是公关。现在,当用户使用我的应用程序时,他/她将看到firebase数据库中的所有位置对象。 (我打算通过firebase添加登录,此功能需要登录)

如何轻松存储用户在应用中选择的位置?

例如: 我想有一个位置列表Y,Z,X等。 (每个都有自己的数据集,由用户更新)

用户A想要查看位置Y和Z,用户B想要查看位置Y和X

如何存储指向用户A想要查看的位置的链接?然后能够在RecycleView中显示这些位置。

我希望如果用户C加入,他也可以添加自己的位置或从位置列表中选择。

2 个答案:

答案 0 :(得分:1)

由于您已经在使用Firebase数据库,因此请将用户优先存储在该数据库中。您可以为用户创建单独的节点,并使用UID作为键(不是必需的)以及首选项或任何其他详细信息作为值来存储每个用户。像这样的东西

"root":{
  "users":{
    "UID1":{
      "locations":{
        "location1":true
        "location2":true
      }
    }
    "UID2":{
      "locations":{
        "location2":true
        "location3":true
      }
    }
    "UID3":{
      "locations":{
        "location4":true
        "location5":true
      }
    }
  }
}

然后,您可以使用

获取对每个用户的引用
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference userRef = FirebaseDatabase.getInstance()
                   .getReference("users/" + user.getUid() + "/locations");

您可以将此引用传递给FirebaseRecyclerAdapter以填充RecyclerView。但是,如果存储在每个列表项中的数据很小,比如只是一个名称而不是picture_url,那么只需存储在每个用户下面。这可能会复制数据,但会快速获取数据,这就是实时数据库应该做的事情。

答案 1 :(得分:0)

我看到它的唯一方法是实现登录功能。通过这种方式,您将知道当前用户是哪一个。

然后,当您拥有该功能时,您有两个选择:

  1. 使用SharedPreferences。您必须使用当前用户加工选定的位置,并且该信息将在本地保存在设备上。每次用户登录时,您都必须检查当前用户是否有任何以前保存的数据。 注意: 这是一种折扣方法!!!
  2. 为应用程序实现某种后端以进行通信。这样,位置的所有信息都将存储在远程计算机上,用户A将能够从不同的设备登录并看到相同的信息。通过使用第一种无法实现的方法!