当前位置: 首页 > 知识库问答 >
问题:

Firebase数据库引用在插入新数据后不返回更新的dataSnapshot

左丘楷
2023-03-14

我在我的项目中集成了Firebase实时数据库。当活动打开时,我检查用户是否已经在数据库中检查,为此,我从oncreate()调用checkisalreadycheckin(empDataRef)方法。检查下面的代码。

class EmpProfileActivity : BaseActivity<EmpProfileActivityBinding, EmpViewModel>() {

    private val timeSdf = SimpleDateFormat("hh:mm a", Locale.getDefault())
    private val dateSdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())

    private lateinit var isCheckIn: String
    private lateinit var checkInTime: String
    private lateinit var checkOutTime: String

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mViewModel = EmpViewModel()
        mBinding.empProfileViewModel = mViewModel

        val empDataRef: DatabaseReference =
            mDatabase!!.reference.child(FirebaseKey.NodeEmpCheckInOut)
                .child(dateSdf.format(Date())).child(userSession!!.getUserId())

        checkIsAlreadyCheckIn(empDataRef)

        mBinding.txtCheckIn.setOnClickListener {
            when (isCheckIn) {
                "0" -> {
                    empDataRef.child(FirebaseKey.checkIn).setValue(timeSdf.format(Date()))
                    empDataRef.child(FirebaseKey.checkOut).setValue("")
                    empDataRef.child(FirebaseKey.todayDate).setValue(dateSdf.format(Date()))
                    empDataRef.child(FirebaseKey.isCheckIn).setValue("1")
                }
                else -> showAlert("Something went wrong, Please contact your admin")
            }
        }
    }


    private fun checkIsAlreadyCheckIn(empDataRef: DatabaseReference) {

        empDataRef.addValueEventListener(object : ValueEventListener {
            override fun onCancelled(databaseError: DatabaseError) {
                Log.e("Error:", databaseError.message)
            }

            override fun onDataChange(dataSnapshot: DataSnapshot) {
                for(data:DataSnapshot in dataSnapshot.children){
                    //------------>aftet click that view error will come here 
                    isCheckIn = dataSnapshot.child(FirebaseKey.isCheckIn).value as String 
                }
            }
        })
    }
}
kotlin.TypeCastException: null cannot be cast to non-null type kotlin.String
        at com.intro.ui.profile.EmpProfileActivity$checkIsAlreadyCheckIn$1.onDataChange(EmpProfileActivity.kt:124)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.1.0:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.1.0:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.1.0:55)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6165)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

问题:当数据插入firebase并在AddeventValueListener中回调/触发器时,如何更新/接收数据?

共有1个答案

缪远
2023-03-14

tostring()使用非常灵活--请尝试以下操作:-

isCheckIn = dataSnapshot.child(FirebaseKey.isCheckIn).value.toString()

P.S:-即使它的null--也会导致--“null”(作为字符串)。然后可以相应地添加支票。

 类似资料:
  • 这就是我的设想。我有一个POJO类,我们称之为Car,声明如下: 在那个类中,列表 图片应该包含到我实际上传图片的Firebase存储的链接。由于Firebase函数的异步根,我在这方面遇到了问题。在第一个时刻,pictures列表具有图像的本地路径,因为我不希望用户在完成向Firebase数据库添加记录所需的所有步骤之前上传任何内容。所以,我只保存图像的本地路径。但是,一旦数据保存到云中,我当然

  • 我有这部分代码: 现在想返回插入或更新的数据作为响应,但是在谷歌上看到很多帖子后,所有尝试都失败了,我怎么能这样做?没有上次插入的id 但返回布尔值: 如何在雄辩的ORM laravel最后插入id 大多数主题想要返回,但我想要所有数据。

  • 下载url来自一个单独的图像选择方法,顺便说一句。我的用户创建代码是这样的。

  • 问题内容: 我正在使用()查找PostLikes表中的(PostId,UserId),如果找到该行,则用于生成delete指令并删除基础行,如果未找到该行,则用于生成insert命令并使用将该行插入表中。但是该行未插入数据库中的表中。这是我到目前为止所做的 和表 PostLikes(LikeId,PostId,UserId) 问题答案: 有几个问题: 您正在寻找重复使用相同的命令,这两个检测行是否

  • 从昨天开始,我一直在尝试为我的Firebase数据库添加一个值,我已经尝试了几种方法,但我做不到。 当用户查看一张奖赏卡时,调用addCard,该卡应添加到当前用户1卡中,并且每次向其添加一张卡时,不会删除该值。 这是我的RewardedAd(正确的广告节目)代码: 这是addCard:

  • 我正在尝试使用Firebase存储和同步几个CSV文件。这些CSV文件的副本存储在内部存储器中。 为了在本地更新它们,我在Firebase存储桶中循环所有项目,比较两者之间的更新时间,然后如果有新版本,下载它。 除了从Firebase中提取元数据外,所有的东西似乎都运行得很好。Firebase文件的最新更新时间总是返回零?我觉得这很奇怪,因为它可以很好地下载文件,这意味着不应该有一个Firebas