如何从Firebase检索变量并将其作为全局变量提供以在其他查​​询中使用?

时间:2018-06-17 14:37:37

标签: java firebase firebase-realtime-database

我正在尝试完成一个应用程序(Java和Kotlin中的几个类),我必须让用户在锦标赛之间切换选项......

意识形态是用户可以创建冠军并邀请人们参与......但是用户可以参加许多锦标赛,并且用户必须在任何时候都可以选择在锦标赛之间切换......

Firebase数据库如下所示:

enter image description here

因此,我必须检索标记为true的锦标赛的密钥,该密钥保存在用户节点中,然后检索有关锦标赛的信息以显示在应用程序中。

        databaseReference?.child("usuarios")?.
            child("$keyuser")?.
            child("campeonatos")?.
            addValueEventListener(object : ValueEventListener {
                override fun onDataChange(dataSnapshot: DataSnapshot) {
                    //Log.e("Count " ,""+dataSnapshot.getChildrenCount());
                    //for (DataSnapshot dataSnapshot : dataSnapshot.getChildren()) {
                    val children = dataSnapshot!!.children
                    children.forEach {
                        //println(it.toString())
                        if (it.value==true)
                        {
                            val keychamp = it.key
                        }
                    }
                }

                override fun onCancelled(error: DatabaseError) {
                    // Failed to read value
                }
            })

请注意,在上面的代码中,用户的密钥是$ keyuser,现在我必须将此代码放在某处并使$ keychamp可用于所有类,这样一旦用户选择了另一个锦标赛,数据就会刷新应用程序。

如何将此变量$ keychamp用于所有类,以便将其用作查询和返回锦标赛数据的路径?

1 个答案:

答案 0 :(得分:0)

问题解决了。

我使用SharedPreferences使变量在需要时可用。当用户想要在锦标赛之间切换时,它选择一个可用的锦标赛,然后使用共享首选项更新该变量。看下面的代码!

首先,我设置这些全局变量

val PREFS_FILENAME = "com.company.prefs"
var prefs: SharedPreferences? = null

然后我实例化了一个SharedPreferences

prefs = this.getSharedPreferences(PREFS_FILENAME, Context.MODE_PRIVATE)

最后我可以更改变量的值

val editor = prefs!!.edit()
editor.putString("keyChampionship", keyChampionship)
editor.apply()

当我使用Firebase时,我将检索此变量并将其用作新冠军的节点的路径!

val keyChampionship = prefs!!.getString("keyChampionship","DEFAULT")

使用此变量创建的引用示例

val ref = FirebaseDatabase.getInstance().getReference("/championship/$keyChampionship/matches")