Android Kotlin:如何从Firebase删除数据

ibrmrt

我是Android Kotlin的新手。单击应用上的按钮时,我尝试从Cloud Firebase删除数据。我在适配器上做了一些必要的代码,但是如何在Activity上调用数据库集合?ı在下面分享了我的适配器和我的活动代码。

class NoteAdapter(val titleText: ArrayList<String>, val rowImage: ArrayList<String>, val noteText: ArrayList<String>, val listener: onClick) : RecyclerView.Adapter<NoteAdapter.NoteHolder>() {


    interface onClick {

        fun onItemClickListener(v: View, pos: Int, data: Any)


    }


    class NoteHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        val itemImage : ImageView = itemView.findViewById(R.id.recyclerImage)
        val itemDelete: ImageView = itemView.findViewById(R.id.delete)


    }


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteHolder {

        val v = LayoutInflater.from(parent.context).inflate(R.layout.recycler_row, parent, false)
        return NoteHolder(v)
    }

    override fun onBindViewHolder(holder: NoteHolder, position: Int) {

        holder.itemView.recyclerTitleText.text = titleText[position]
        Picasso.get().load(rowImage[position]).resize(150,150).into(holder.itemImage)

        holder.itemView.setOnClickListener {


            val intent = Intent(holder.itemView.context, PastNotesActivity:: class.java)
            intent.putExtra("oldTitle", titleText[position])
            intent.putExtra("oldNote", noteText[position])
            intent.putExtra("oldImage", rowImage[position])
            holder.itemView.context.startActivity(intent)


        }

        holder.itemDelete.setOnClickListener { v: View ->

            titleText.removeAt(position)
            noteText.removeAt(position)
            rowImage.removeAt(position)

            notifyItemRemoved(position)

            listener.onItemClickListener(v, position, holder.itemView)
        }

    }

    override fun getItemCount(): Int {

        return titleText.size
    }


    override fun getItemId(position: Int):Long  {
        return position.toLong()
    }

    override fun getItemViewType(position: Int):Int {
        return position
    }


}

这是我的活动代码,我在此活动中创建itemDelete乐趣,但是如何在此乐趣中定义适配器代码?并且我尝试在文档中写“ {id.data}”,但没有用,我应该写什么?

class ListViewActivity : AppCompatActivity() {

    var selectedPicture: Uri? = null

    private  lateinit var auth: FirebaseAuth
    private lateinit var db : FirebaseFirestore

    var titleTextFromFB : ArrayList<String> = ArrayList()
    var noteTextFromFB : ArrayList<String> = ArrayList()
    var imageFromFB : ArrayList<String> = ArrayList()


    var adapter: NoteAdapter? = null



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_list_view)

        auth = FirebaseAuth.getInstance()
        db = FirebaseFirestore.getInstance()

        getDataFromFirestore()

        // recyclerview

        var layoutManager = LinearLayoutManager(this)
        recyclerView.layoutManager = layoutManager

       // adapter = NoteAdapter(titleTextFromFB, imageFromFB, noteTextFromFB)
        //recyclerView.adapter = adapter

        adapter = NoteAdapter(titleTextFromFB, imageFromFB, noteTextFromFB, object: NoteAdapter.onClick{

            override fun onItemClickListener(v: View, pos: Int, data: Any) {

                when(v.id){

                    R.id.delete -> itemDelete(data)

                }

            }

        })

        recyclerView.adapter = adapter

    }


    override fun onCreateOptionsMenu(menu: Menu?): Boolean {

        val menuInflater = menuInflater
        menuInflater.inflate(R.menu.add_note, menu)

        return super.onCreateOptionsMenu(menu)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {

        if (item.itemId == R.id.add_note_click) {
            // Take Notes Activity
            val intent = Intent(applicationContext, TakeNotesActivity::class.java)
            intent.putExtra("info","new")
            startActivity(intent)

        } else if (item.itemId == R.id.log_out) {

            val alert = AlertDialog.Builder(this)

            alert.setTitle("Log Out")
            alert.setMessage("Are you sure to logout from the app ?")
            alert.setPositiveButton("Yes") {dialog, which ->

                auth.signOut()
                val intent = Intent(applicationContext, MainActivity::class.java)
                startActivity(intent)
                finish()
            }

            alert.setNegativeButton("No") {dialog, which ->

            }

            alert.show()

        }

        return super.onOptionsItemSelected(item)
    }

    // get data from firestore

    fun getDataFromFirestore() {

        db.collection("Notes").orderBy("date", Query.Direction.DESCENDING).addSnapshotListener{ snapshot, exception ->

            if (exception != null) {

                // If there is a error ,

                Toast.makeText(applicationContext, exception.localizedMessage.toString(), Toast.LENGTH_LONG).show()

            } else {

                if (snapshot != null) {

                    if (!snapshot.isEmpty) {

                        titleTextFromFB.clear()
                        noteTextFromFB.clear()
                        imageFromFB.clear()

                        val documents = snapshot.documents
                        for (document in documents) {

                            val userEmail = document.get("userEmail") as String
                            val noteTitle = document.get("noteTitle") as String
                            val yourNote = document.get("yourNote") as String
                            val downloadUrl = document.get("downloadUrl") as String
                            val timestamp = document.get("date") as Timestamp
                            val date = timestamp.toDate()

                            titleTextFromFB.add(noteTitle)
                            imageFromFB.add(downloadUrl)
                            noteTextFromFB.add(yourNote)

                            adapter!!.notifyDataSetChanged()

                        }
                    }
                }

            }


        }


    }

    fun itemDelete(data: Any) {

        db.collection("Notes").document().delete().addOnSuccessListener {


        }

            .addOnFailureListener { exception ->

                Toast.makeText(applicationContext, exception.localizedMessage.toString(), Toast.LENGTH_LONG).show()
            }
    }


}
弗兰克·范普菲伦

此代码无法正常工作:

   db.collection("Notes").document().delete().addOnSuccessListener {

db.collection("Notes").document()调用将创建对新文档的引用,然后将其删除。所以什么也没发生。

您需要确定用户单击的文档的ID,并将其传递给document(...)呼叫。这样可以为您提供DocumentReference正确的文档,以便delete()呼叫将随后删除该文档。

确定用户单击的文档ID的关键在以下代码中:

adapter = NoteAdapter(titleTextFromFB, imageFromFB, noteTextFromFB, object: NoteAdapter.onClick{
    override fun onItemClickListener(v: View, pos: Int, data: Any) {
        when(v.id){
            R.id.delete -> itemDelete(data)
        }
    }
})

您将需要从这些参数之一来确定ID: vpostdata我通常通过DocumentSnapshot在适配器或活动中保留文档ID或对象的列表,然后按其位置/索引查找单击的项目来完成此操作。

因此,在getDataFromFirestore函数中,将快照添加到您在活动类中定义为字段的列表中:

// in your activity, declare a list;
var mDocuments: List<DocumentSnapshot>? = null

// Then in getDataFromFirestore store that list
...
mDocuments = snapshot.documents;
val documents = snapshot.documents
for (document in documents) {
    ...
}
...

// And use it when calling itemDelete:
adapter = NoteAdapter(titleTextFromFB, imageFromFB, noteTextFromFB, object: NoteAdapter.onClick{
    override fun onItemClickListener(v: View, pos: Int, data: Any) {
        when(v.id){
            R.id.delete -> itemDelete(mDocuments[pos])
        }
    }
})

// To then finally delete the document by its ID
fun itemDelete(doc: DocumentSnapshot) {
    db.collection("Notes").document(doc.Id).delete()
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Firebase Android删除数据

来自分类Dev

在Firebase上删除数据时,Android ListView删除

来自分类Dev

如何在Android中使用Cursor删除数据?

来自分类Dev

删除数据库android sqlite

来自分类Dev

Android:如何在不从数组列表中删除数据的情况下清除列表视图?

来自分类Dev

在ANDROID中,如何通过Button单击从LISTVIEW中删除数据?

来自分类Dev

如何在sqlite android片段中更改或删除数据时刷新recyclerview?

来自分类Dev

如何从Firebase删除数据库?

来自分类Dev

在Android上的Firebase Firestore中删除数组值

来自分类Dev

如何使用 kotlin 从 android studio 中的 Firebase 读取数据?

来自分类Dev

如何在Android Studio中从Firebase删除按键数据

来自分类Dev

Android:删除数据库路径的硬编码

来自分类Dev

删除数据不起作用,SQLite Android

来自分类Dev

删除数据后,Android CustomListViewAdapter表现异常

来自分类Dev

使用Android Kotlin从Firebase提取数据

来自分类Dev

如何禁用Android Mobile中的清除数据按钮

来自分类Dev

Android Firebase 数据库:删除

来自分类Dev

数据如何从 Firebase Android 返回?

来自分类Dev

如何删除数据验证?

来自分类常见问题

如何在Android中取消Firebase Realtime数据库正在进行的写入或删除操作

来自分类Dev

Android现有多个子级时,如何从Firebase数据库中删除记录?

来自分类Dev

卸载Android应用程序时不会删除数据库

来自分类Dev

如何从Android App删除Firebase用户?

来自分类Dev

Android-如何删除Firebase中的房间

来自分类Dev

如何在firebase android中删除节点

来自分类Dev

firebase功能配置-删除数据

来自分类Dev

如何删除“NaN”而不删除数据?

来自分类Dev

如何从Firebase中的root /删除所有条目(删除数据)?

来自分类Dev

使用动态添加的复选框从Android数据库中填充的ListView中删除数据?

Related 相关文章

  1. 1

    如何从Firebase Android删除数据

  2. 2

    在Firebase上删除数据时,Android ListView删除

  3. 3

    如何在Android中使用Cursor删除数据?

  4. 4

    删除数据库android sqlite

  5. 5

    Android:如何在不从数组列表中删除数据的情况下清除列表视图?

  6. 6

    在ANDROID中,如何通过Button单击从LISTVIEW中删除数据?

  7. 7

    如何在sqlite android片段中更改或删除数据时刷新recyclerview?

  8. 8

    如何从Firebase删除数据库?

  9. 9

    在Android上的Firebase Firestore中删除数组值

  10. 10

    如何使用 kotlin 从 android studio 中的 Firebase 读取数据?

  11. 11

    如何在Android Studio中从Firebase删除按键数据

  12. 12

    Android:删除数据库路径的硬编码

  13. 13

    删除数据不起作用,SQLite Android

  14. 14

    删除数据后,Android CustomListViewAdapter表现异常

  15. 15

    使用Android Kotlin从Firebase提取数据

  16. 16

    如何禁用Android Mobile中的清除数据按钮

  17. 17

    Android Firebase 数据库:删除

  18. 18

    数据如何从 Firebase Android 返回?

  19. 19

    如何删除数据验证?

  20. 20

    如何在Android中取消Firebase Realtime数据库正在进行的写入或删除操作

  21. 21

    Android现有多个子级时,如何从Firebase数据库中删除记录?

  22. 22

    卸载Android应用程序时不会删除数据库

  23. 23

    如何从Android App删除Firebase用户?

  24. 24

    Android-如何删除Firebase中的房间

  25. 25

    如何在firebase android中删除节点

  26. 26

    firebase功能配置-删除数据

  27. 27

    如何删除“NaN”而不删除数据?

  28. 28

    如何从Firebase中的root /删除所有条目(删除数据)?

  29. 29

    使用动态添加的复选框从Android数据库中填充的ListView中删除数据?

热门标签

归档