Firebase错误地更新了多个孩子

时间:2017-06-21 14:00:02

标签: android firebase firebase-realtime-database

在我的应用程序中,我使用Firebase来存储数据。每次用户'位置更改时,会调用一个函数将新坐标写入Firebase。但是,我正在使用多个帐户,程序会将信息写入错误的子节点。我似乎无法找到问题。我的代码应该让情况更加清晰:

pushToFirebaseonLocationUpdate

以上代码是位置推送器,每次位置更改时都会调用该位置推送器。最后,firebaseUser将此信息推送到正确的用户节点,其中public void pushToFirebaseOnLocationUpdate(@NonNull FirebaseUser loggedInUser, Double[] data) { userRef = userDataRef.child(loggedInUser.getUid()); userRef.child("location").child("latitude").setValue(data[0]); userRef.child("location").child("longitude").setValue(data[1]); } 是当前登录的用户:

trait Incrementer[T] {
  def inc(s: Symbol)(t: T): T
}

object Incrementer {
  def apply[T](implicit T: Incrementer[T]): Incrementer[T] = T
  implicit def head[Key <: Symbol, Head, Tail <: HList](implicit Key: Witness.Aux[Key], Head: Numeric[Head]) = new Incrementer[FieldType[Key, Head] :: Tail] {
    import Head._
    override def inc(s: Symbol)(t: FieldType[Key, Head] :: Tail): (FieldType[Key, Head] :: Tail) =
      if (s == Key.value) (t.head + fromInt(1)).asInstanceOf[FieldType[Key, Head]] :: t.tail
      else t
  }

  implicit def notHead[H, Tail <: HList](implicit Tail: Incrementer[Tail]) = new Incrementer[H :: Tail] {
    override def inc(s: Symbol)(t: H :: Tail): H :: Tail = t.head :: Tail.inc(s)(t.tail)
  }

  implicit def gen[T, Repr](implicit gen: LabelledGeneric.Aux[T, Repr], Repr: Incrementer[Repr]) = new Incrementer[T] {
    override def inc(s: Symbol)(t: T): T = gen.from(Repr.inc(s)(gen.to(t)))
  }
}

case class Count(counter: Int)
case class CountAndMore(more: String, counter: Int)
case class FakeCount(counter: Long)
object Test extends App {

  println(Incrementer[Count].inc('counter)(Count(0)))
  println(Incrementer[CountAndMore].inc('counter)(CountAndMore("", 0)))
  println(Incrementer[FakeCount].inc('counter)(FakeCount(0)))
}

然而,不知何故,当我将用户注销并使用其他帐户登录时,应用程序会在当前用户和已注销的用户中设置位置节点。为什么它会这样?

1 个答案:

答案 0 :(得分:0)

确保在注销时清除userRef变量。