簡體   English   中英

發現名稱沖突的吸氣劑

[英]Found conflicting getters for name

我是 kotlin 編碼的初學者,我正在嘗試制作一個帶有編輯文本的搜索欄,可以從 fire-base 中找到用戶帳戶。 這是我的代碼

    package com.example.videoapp

import android.annotation.SuppressLint
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import androidx.core.widget.addTextChangedListener
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.videoapp.Adapter.UserAdapter
import com.example.videoapp.Model.Users
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.fragment_explore.*
import kotlinx.android.synthetic.main.fragment_explore.view.*
import kotlinx.android.synthetic.main.fragment_explore.view.recyclerView
import java.util.*
import kotlin.collections.ArrayList

/**
 * A simple [Fragment] subclass.
 */
class ExploreFragment : Fragment() {
   private var recyclerView: RecyclerView?=null
    private var userAdapter:UserAdapter?=null
    private var mUser: List<Users>?=null
    private var searchEditText: EditText?=null


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val view= inflater.inflate(R.layout.fragment_explore, container, false)
        recyclerView = view.findViewById(R.id.recyclerView)
        recyclerView!!.setHasFixedSize(true)
        recyclerView!!.layoutManager = LinearLayoutManager(context)
        searchEditText = view.findViewById(R.id.search_edit_text)

        mUser = ArrayList()
        retrieveAllUserd()
        searchEditText!!.addTextChangedListener(object :TextWatcher{
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(cs: CharSequence?, start: Int, before: Int, count: Int) {
                searchForUser(cs.toString().toLowerCase())
            }
        })

        return view
    }

    private fun retrieveAllUserd() {
        var firebaseUserID = FirebaseAuth.getInstance().currentUser!!.uid
        val refUser =  FirebaseDatabase.getInstance().reference.child("Users").child(firebaseUserID)
        refUser.addValueEventListener(object :ValueEventListener{
            override fun onDataChange(p0: DataSnapshot) {
                (mUser as ArrayList<Users>).clear()
                if (searchEditText!!.text.toString() == ""){
                    for (snapshot in p0.children){
                        val user = snapshot.getValue(Users::class.java)
                        if (!(user!!.getid()).equals(firebaseUserID)){
                            (mUser as ArrayList<Users>).add(user)

                        }
                    }

                }
                userAdapter = UserAdapter(
                    mContext = context!!,
                    mUser = mUser!!,
                    isFragment = false
                )
                recyclerView!!.adapter = userAdapter
            }

            override fun onCancelled(p0: DatabaseError) {
            }

         })

    }
    private fun searchForUser(str: String){
        var firebaseUserID = FirebaseAuth.getInstance().currentUser!!.uid
        val queryUserd = FirebaseDatabase.getInstance().reference.child("Users").orderByChild("name").startAt(str)
            .endAt(str+"\uf8ff")
        queryUserd.addValueEventListener(object : ValueEventListener{
            override fun onCancelled(p0: DatabaseError) {
            }

            override fun onDataChange(p0: DataSnapshot) {
                (mUser as ArrayList<Users>).clear()
                for (snapshot in p0.children){
                    val user = snapshot.getValue(Users::class.java)
                    if (!(user!!.getid()).equals(firebaseUserID)) {
                        (mUser as ArrayList<Users>).add(user)
                    }
                }

                userAdapter = UserAdapter(context!!,mUser!!,false)
                recyclerView!!.adapter = userAdapter


            }
        })
    }


}

包 com.example.videoapp.Model

class Users {
    var username:String = " "
    var Fullname:String = " "
    var image:String = " "
    var id:String = " "

    constructor()
    constructor(username: String, fullname: String, image: String, id: String) {
        this.username = username
        this.Fullname = fullname
        this.image = image
        this.id = id
    }
    fun getusername(): String{
        return username
    }
    fun setusername(username: String){
        this.username=username
    }
    fun getfullname(): String{
        return fullname
    }
    fun setfullname(fullname: String){
        this.Fullname=fullname
}

    fun getimage(): String{
        return image
    }
    fun setimage(image: String){
        this.image=image
    }
    fun getid(): String{
        return id
    }
    fun setid(id: String){
        this.id=id
    }


}

但是每當我在搜索中輸入任何單詞時,它都會返回錯誤

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.videoapp, PID: 4847
com.google.firebase.database.DatabaseException: Found conflicting getters for name: getfullname
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.<init>(com.google.firebase:firebase-database@@19.3.0:477)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.loadOrCreateBeanMapperForClass(com.google.firebase:firebase-database@@19.3.0:329)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(com.google.firebase:firebase-database@@19.3.0:430)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@19.3.0:231)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@19.3.0:79)
    at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@19.3.0:203)
    at com.example.videoapp.ExploreFragment$searchForUser$1.onDataChange(ExploreFragment.kt:104)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.3.0:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.3.0:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.3.0:55)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)

在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.爪哇:807)

這就是聲明User類所需的全部內容:

class Users(
    var username:String = " "
    var Fullname:String = " "
    var image:String = " "
    var id:String = " "
)

Getter 和 Setter 由 Kotlin 編譯器自動生成。

嘗試擺脫 getter 和 setter 並使用data類:

data class User(
        var username: String = " ",
        var fullName: String = " ",
        var image: String = " ",
        var id: String = " "
)

主構造函數的參數,例如用戶名,變成了屬性,所以你不需要為它們編寫額外的 getter 和 setter 函數。

Kotlin 編譯器為類中定義的只讀變量(讀寫變量的 getter 和 setter)生成 getter。 因為您有一個名為fullname的變量以及自定義getfullnamegetfullnamesetfullname您將有兩個 getter 和兩個 setter 用於fullname變量。

以下是您將在 Java 代碼中看到的所有get方法:

用戶類中的所有 get 方法

並且看起來像snapshot.getValue(Users::class.java)不知道要使用哪個getterssetters

簡單的解決方案應該是刪除自定義方法:

class Users {
    var username:String = " "
    var Fullname:String = " "
    var image:String = " "
    var id:String = " "

    constructor()
    constructor(username: String, fullname: String, image: String, id: String) {
        this.username = username
        this.Fullname = fullname
        this.image = image
        this.id = id
    }
}

否則,使用private訪問修飾符更新變量聲明:

class Users {
    private var username:String = " "
    private var Fullname:String = " "
    private var image:String = " "
    private var id:String = " "

    constructor()
    constructor(username: String, fullname: String, image: String, id: String) {
        this.username = username
        this.Fullname = fullname
        this.image = image
        this.id = id
    }

    // Below are your custom getters and setters
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM