【发布时间】:2019-12-25 20:36:36
【问题描述】:
我在 onCreate 活动中有以下代码(尝试使用 onStart,效果不佳)。每次文档 gameID 中的任何字段发生更改时,活动都会使用新数据重新开始。是否可以让它更新文本字段 mPlayersLeft 而无需再次启动相同的活动?活动堆栈,我需要为已进行的每个更新按下回。也尝试了执行器,但似乎不起作用。
示例:这是一个有问题的游戏。当我回答 5 个问题时,我进入第 6 个问题,我通过控制台更新任何游戏字段,活动再次从问题 1 开始,使用新玩家计数(如果我已更新该字段),如果我要回击,我回到第 6 个问题的相同活动。
我已经尝试了所有这些,只有当它是 Java 时,它才能工作。我还没有找到任何有效的 Kotlin 变体。
科特林:
db.collection("games").document(gameID)
.addSnapshotListener { snapshot, e ->
if (e != null) {
Log.w(tag, "Listen failed.", e)
return@addSnapshotListener
}
if (snapshot != null && snapshot.exists()) {
val players = snapshot.data?.get("players") ?: 0
if (players != 0) {
mPlayersLeft!!.text = "$players"
}
} else {
Log.d(tag, "Current data: null")
}
}
Java:
db.collection("games").document(gameID)
.addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot snapshot,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
if (snapshot != null && snapshot.exists()) {
long players = (long) snapshot.getData().get("players");
mPlayersLeft.setText("" + players);
} else {
Log.d(TAG, "Current data: null");
}
}
});
侦听器 Java 到 Kotlin(通过 Android Studio 翻译):
db.collection("games").document(gameID)
.addSnapshotListener(EventListener { snapshot, e ->
if (e != null) {
Log.w(tag, "Listen failed.", e)
return@EventListener
}
if (snapshot != null && snapshot.exists()) {
val players = snapshot.data?.get("players") ?: 0
if (players != 0) {
mPlayersLeft!!.text = "$players"
}
} else {
Log.d(tag, "Current data: null")
}
}
【问题讨论】:
-
您所说的“活动以新数据重新开始”到底是什么意思?请具体说明您正在观察的内容。
-
这就是为什么我在那之后添加了一个示例。在整个应用程序的生命周期中,随着每个新的 Firestore 字段更改,都会出现一个新的活动。示例:开始活动 -> 问题活动(字段更改开始另一个)-> 问题活动等。
-
您在此处显示的代码根本不会启动新活动,因此根据我们所看到的,完全不清楚为什么会发生这种情况。 Kotlin 永远不会对等价的 Java 不会做的活动做一些特殊的事情。没有更多细节,真的无法说。
-
经过进一步调试,我发现它与 getStringExtra 相关,因为当我使用 getStringExtra 并将其设置为 gameID 时,它会这样做,但是当我在 document("someStaticString") 中使用静态字符串时,一切如我所愿。
-
这里的信息真的不够。我建议使用完全重现问题的 MCVE 编辑问题,以便每个人都可以看到所有活动部分。 stackoverflow.com/help/minimal-reproducible-example
标签: java android firebase kotlin google-cloud-firestore