[英]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 編譯器自動生成。
Kotlin 編譯器為類中定義的只讀變量(讀寫變量的 getter 和 setter)生成 getter。 因為您有一個名為fullname
的變量以及自定義getfullname
和getfullname
, setfullname
您將有兩個 getter 和兩個 setter 用於fullname
變量。
以下是您將在 Java 代碼中看到的所有get
方法:
並且看起來像snapshot.getValue(Users::class.java)
不知道要使用哪個getters
和setters
。
簡單的解決方案應該是刪除自定義方法:
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.