本文概述
- 更新资料
- 添加完成回调
- 删除
更新资料 为了更新JSON数据库中的单个节点, 我们只需在正确的子引用上使用setValue()即可。
correct child reference. myRef.setValue("Hello, World")myRef.child("someChild").child("name").setValue(name)
如果我们要写入节点的特定子节点而不覆盖其他子节点, 则可以使用updateChildren()方法。当我们调用updateChildren()时, 可以通过指定键的路径来更新较低级别的子值。
例如
//writeNewPost function for chat applicationprivate fun Newpost(userId:String, username:String, title:String, body:String){ //creating new post at /user-posts/$userid/$postid simultaneously //Using push key val key=database.child("posts").push().key //Checking it is null or notif(key==null){Log.w(TAG, "Could not get push key for posts")return } //Creating Post object val post=Post(userId, username, title, body) //Push it to a mapval postValues=post.toMap() val childUpdates=HashMap<
String, Any>
() childUpdates["/posts/$key"]=postValues childUpdates["/user-posts/$userId/$key"]=postValues database.updateChildren(childUpdates)}
push()方法用于在/ posts / $ postid中为所有用户创建包含post的节点中的post, 并同时使用getKey()方法检索密钥。然后, 该密钥用于在用户帖子/ user-posts / $ userid / $ postid中创建第二个条目。使用/ user-posts / $ userid / $ postid路径, 我们可以通过一次调用updateChildren()同时更新到JSON树中的多个位置。以原子方式进行更新意味着所有更新成功或所有更新失败。
添加完成回调 如果我们想知道何时提交数据, 则可以添加完成监听器。 setValue()和updateChildren()都采用可选的完成侦听器。当写入成功提交到数据库后, 它将被调用。如果调用失败, 则向侦听器传递一个错误对象。此错误对象指示失败发生的原因。
database.child("users").child(userId).setValue(user) .addOnSuccessListener{//Write was successful!//?. }.addOnFailureListener{//Write failed//?}
删除 删除数据的最简单方法是在对数据位置的引用上调用removeValue()。我们还可以通过将null指定为另一个写操作(例如setValue()或updateChildren())的值来删除数据。我们可以将此技术与updateChildren()结合使用, 以在单个API调用中删除多个子级。
activity_upd_del.xml
upd_del.kt
package com.example.firebaserealtimedatabaseimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.text.TextUtilsimport android.util.Logimport android.view.Viewimport android.widget.Toastimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.database.*import kotlinx.android.synthetic.main.activity_upd_del.*import kotlinx.android.synthetic.main.activity_welcome.*import kotlinx.android.synthetic.main.activity_welcome.emailclass upd_del : AppCompatActivity() {private var mFirebaseDatabase: DatabaseReference? = nullprivate var mFirebaseInstance: FirebaseDatabase? = nullprivate var userId: String? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_upd_del)mFirebaseInstance = FirebaseDatabase.getInstance()// get reference to 'users' nodemFirebaseDatabase = mFirebaseInstance!!.getReference("users")val user = FirebaseAuth.getInstance().getCurrentUser()// add it only if it is not saved to databaseuserId = user?.getUid()}private fun updateUser(name: String, email: String) {// updating the user via child nodesif (!TextUtils.isEmpty(name) &
&
!TextUtils.isEmpty(email)) {mFirebaseDatabase!!.child(userId!!).child("name").setValue(name)mFirebaseDatabase!!.child(userId!!).child("email").setValue(email)Toast.makeText(applicationContext, "Successfully updated user", Toast.LENGTH_SHORT).show()}elseToast.makeText(applicationContext, "Unable to update user", Toast.LENGTH_SHORT).show()}fun onUpdateClicked(view: View) {val name = name.getText().toString()val email = email.getText().toString()//Calling updateUser function updateUser(name, email)}fun onDeleteClicked(view: View) {//Remove value from child mFirebaseDatabase!!.child(userId!!).removeValue()Toast.makeText(applicationContext, "Successfully deleted user", Toast.LENGTH_SHORT).show()// clear informationtxt_user.setText("")email.setText("")name.setText("")}companion object {private val TAG = upd_del::class.java.getSimpleName()}}
输出量
文章图片
【Firebase(实时数据库更新和删除)】更新之前
文章图片
更新后
文章图片
删除后
文章图片
推荐阅读
- Cloud Firestore介绍和使用
- Firebase(实时数据库读写)
- Firebase实时数据库中的数据组织
- Firebase(实时数据库设置和配置)
- Firebase(实时数据库)
- Firebase SDK(使用电子邮件链接进行身份验证)
- Firebase UI(使用电子邮件链接进行身份验证)
- 购买游戏笔记本电脑前需要注意的8件事
- DTX-XFM光缆测试模块