मैं फेसबुक जैसे सोशल ऐप बना रहा हूं लेकिन फायरबेस डेटाबेस क्वेरी का उपयोग करके दोस्तों को ढूंढते समय मैं फंस गया।

समस्या यह है कि खोज परिणाम (उपयोगकर्ता) प्रदर्शित नहीं हो रहे हैं। जब मैं setQuery() में पैरामीटर के रूप में allUsersRef डालता हूं तो उपयोगकर्ता प्रदर्शित होते हैं, लेकिन जब मैं searchFriendsQuery को पैरामीटर के रूप में डालता हूं तो यह कुछ भी प्रदर्शित नहीं करता है। मैंने अपनी समस्या को हल करने के लिए कई उत्तर देखे हैं लेकिन उनमें से कोई भी काम नहीं करता है।

यह वह तरीका है जिसमें मैं फंस गया, जैसा कि मैंने कहा था कि यह विधि फायरबेस डेटाबेस के माध्यम से पूर्ण नाम से खोज करती है और फिर यह उन उपयोगकर्ताओं को प्रदर्शित करती है जो उपयोगकर्ता इनपुट से मेल खाते हैं:

private fun searchFriends(userInputText: String) {
        Log.i("SEARCH",userInputText)
        Toast.makeText(this,"Searching...",Toast.LENGTH_LONG).show()

        val searchFriendsQuery = allUsersRef.orderByChild("fullname")
            .startAt(userInputText)
            .endAt(userInputText + "\uf8ff")

        val options: FirebaseRecyclerOptions<FindFriends> = FirebaseRecyclerOptions.Builder<FindFriends>()
            .setQuery(searchFriendsQuery,FindFriends::class.java)
            .build()

        val firebaseRecyclerAdapter = object: FirebaseRecyclerAdapter<FindFriends,FindFriendsViewHolder>(options) {
            override fun onBindViewHolder(viewHolder: FindFriendsViewHolder, position: Int, model: FindFriends) {
                viewHolder.setProfilesInfo(model)
            }
            override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FindFriendsViewHolder {
                val view: View = LayoutInflater.from(parent.context)
                    .inflate(R.layout.users_display_layout, parent, false)
                return FindFriendsViewHolder(view)
            }
        }
        firebaseRecyclerAdapter.startListening()
        searchOutputList.adapter = firebaseRecyclerAdapter
    }

यह मेरा व्यूहोल्डर क्लास है:

class FindFriendsViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
        var mView = itemView

        private val friendsProfileImage: CircleImageView = mView.findViewById(R.id.find_users_profile_image)
        private val friendsFullName: TextView = mView.findViewById(R.id.find_user_full_name)
        private val friendsStatus: TextView = mView.findViewById(R.id.find_user_status)

        fun setProfilesInfo(friends: FindFriends){
            friendsFullName.text = friends.fullname
            friendsStatus.text = friends.status
            Glide.with(itemView.context)
                .load(friends.profileimage)
                .into(friendsProfileImage)
        }
    }

यह मेरा मॉड्यूल वर्ग है:

class FindFriends {
    var profileimage: String? = null
    var fullname: String? = null
    var status: String? = null
}

ये कोड में चर के मान हैं:

private lateinit var allUsersRef: DatabaseReference
private lateinit var searchOutputList: RecyclerView
private lateinit var searchInputText: EditText

allUsersRef = FirebaseDatabase.getInstance().reference.child("Users")

searchOutputList = findViewById(R.id.search_list)
searchOutputList.setHasFixedSize(true)
searchOutputList.layoutManager = LinearLayoutManager(this)

searchInputText = findViewById(R.id.search_input_box).toString()

JSON निर्यात की गई फ़ाइल:

"Users" : {
    "Q4RWEkf8YsRnQppwpEYrSMKa0M82" : {
      "country" : "Mexico",
      "dateofbirth" : "Unknown",
      "fullname" : "Oswaldo Escobedo",
      "gender" : "Unknown",
      "profileimage" : "https://firebasestorage.googleapis.com/v0/b/myhero-8778b.appspot.com/o/Profile%20Images%2FQ4RWEkf8YsRnQppwpEYrSMKa0M82.jpg?alt=media&token=44fe278b-a7f0-42c7-90b9-dfbcc57bf733",
      "relationshipstatus" : "Unknown",
      "status" : "Active",
      "username" : "oswi73"
    },
    "h7DPxSQax3PNYFcXNDSgk4H9zyF2" : {
      "country" : "Mexico",
      "dateofbirth" : "Unknown",
      "fullname" : "Jenny Balandran",
      "gender" : "Unknown",
      "profileimage" : "https://firebasestorage.googleapis.com/v0/b/myhero-8778b.appspot.com/o/Profile%20Images%2Fh7DPxSQax3PNYFcXNDSgk4H9zyF2.jpg?alt=media&token=99633998-46f4-4a64-806d-3a8bc7ec0580",
      "relationshipstatus" : "Unknown",
      "status" : "Active",
      "username" : "oescob16"
    },
    "nq6OPYGHuAdCApuyXhLYHLLdOtA3" : {
      "country" : "México ",
      "dateofbirth" : "Unknown",
      "fullname" : "Oswaldo Escobedo",
      "gender" : "Unknown",
      "profileimage" : "https://firebasestorage.googleapis.com/v0/b/myhero-8778b.appspot.com/o/Profile%20Images%2Fnq6OPYGHuAdCApuyXhLYHLLdOtA3.jpg?alt=media&token=55f8c342-9e74-400f-8038-5a7af208510e",
      "relationshipstatus" : "Unknown",
      "status" : "Active",
      "username" : "oescobedo3 "
    }
  }

यह userInputText का लॉग मान है:

2020-06-14 19:26:11.288 10129-10129/com.example.bemyhero I/SEARCH: androidx.appcompat.widget.AppCompatEditText{e57e7ff VFED..CL. .F...... 30,103-1080,313 #7f08012a app:id/search_input_box aid=1073741824}
0
Oswaldo Escobedo 14 जून 2020, 18:41

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि आपने toString को किसी EditText फ़ील्ड पर कॉल किया है। इसे डेटाबेस में पास करने से काम नहीं चलेगा, क्योंकि आप डेटाबेस को शाब्दिक स्ट्रिंग "androidx.appcompat.widget.AppCompatEditText{e57e7ff VFED..CL. .F...... 30,103-1080,313 #7f08012a app:id/search_input_box aid=1073741824}" के लिए खोज रहे होंगे।

आप फ़ील्ड से टेक्स्ट प्राप्त करना चाहेंगे, और उसके लिए खोज करेंगे:

searchFriends(textField.getText().toString());
0
Frank van Puffelen 15 जून 2020, 01:45