[英]Found conflicting getters for name
I am a beginner in kotlin coding and I am trying to make a search bar with edit text which can find the user account from the fire-base.我是 kotlin 编码的初学者,我正在尝试制作一个带有编辑文本的搜索栏,可以从 fire-base 中找到用户帐户。 Here are my codes
这是我的代码
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
}
})
}
}
package com.example.videoapp.Model包 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
}
}
But whenever I am typing any word in the search its returning an error但是每当我在搜索中输入任何单词时,它都会返回错误
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)
at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.爪哇:807)
This is all you need to declare your User
class:这就是声明
User
类所需的全部内容:
class Users(
var username:String = " "
var Fullname:String = " "
var image:String = " "
var id:String = " "
)
Getters and Setters are automatically generated by the Kotlin compiler. Getter 和 Setter 由 Kotlin 编译器自动生成。
Try to get rid of getters and setters and use data
class:尝试摆脱 getter 和 setter 并使用
data
类:
data class User(
var username: String = " ",
var fullName: String = " ",
var image: String = " ",
var id: String = " "
)
Parameters of primary constructor, eg username, become properties , so you don't need to write additional getter and setter functions for them.主构造函数的参数,例如用户名,变成了属性,所以你不需要为它们编写额外的 getter 和 setter 函数。
Kotlin compiler generates getters for read-only variables (getters and setters for read-write variables) defined in a class. Kotlin 编译器为类中定义的只读变量(读写变量的 getter 和 setter)生成 getter。 Because you have a variable named
fullname
and custom getfullname
and setfullname
you will have two getters and two setters for fullname
variable.因为您有一个名为
fullname
的变量以及自定义getfullname
和getfullname
, setfullname
您将有两个 getter 和两个 setter 用于fullname
变量。
Here are all get
methods you will see from Java code:以下是您将在 Java 代码中看到的所有
get
方法:
And looks like snapshot.getValue(Users::class.java)
does not know which getters
and setters
to use.并且看起来像
snapshot.getValue(Users::class.java)
不知道要使用哪个getters
和setters
。
Simples solution should be removing custom methods:简单的解决方案应该是删除自定义方法:
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
}
}
Otherwise, update variables declaration with private
access modifier:否则,使用
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.