вот основной метод, который должен запрашивать базу данных
Код: Выделить всё
private fun sendInvite(idUzivatele: String) {
// podiva se jestli uz uzivatel pozvanku od spolecnosti nema
val invitesRef = db.child("users").child(idUzivatele).child("invites")
invitesRef.get()
.addOnSuccessListener { dataSnapshot ->
var maUzInvite = false
if (dataSnapshot.exists()) {
for (invitesSnapshot in dataSnapshot.children){
if (invitesSnapshot.child("from").getValue(String::class.java) == CompanyID){
maUzInvite = true
break
}
}
}
if (!maUzInvite){
val invitesMap = mapOf(
"from" to CompanyID
)
db.child("users").child(idUzivatele).child("invites").push().setValue(invitesMap)
.addOnSuccessListener {
Toast.makeText(
this,
"Invite sent!",
Toast.LENGTH_SHORT
).show()
}
.addOnFailureListener {
Toast.makeText(
this,
"Failed to sent invite",
Toast.LENGTH_SHORT
).show()
}
} else {
Toast.makeText(
this,
"The user already has an invitation!",
Toast.LENGTH_SHORT
).show()
}
}
.addOnFailureListener { exception ->
Log.e("RealtimeDB", "Error getting invites ", exception)
}
}
Код: Выделить всё
private fun findUserByEmail(emailInput: String, callback: (String?) -> Unit){
db.child("users").get()
.addOnSuccessListener { dataSnapshot ->
var foundUid: String? = null
// Iterace přes všechny uživatele
for (userSnapshot in dataSnapshot.children) {
val email = userSnapshot.child("email").getValue(String::class.java)
if (email == emailInput) {
foundUid = userSnapshot.key // UID je klíčem ve struktuře
break
}
}
// vraceni hodnoty pomoci funkce
callback(foundUid)
}.addOnFailureListener { exception ->
Log.e("Firebase", "Chyba při čtení uživatelů: ${exception.message}")
}
}
Код: Выделить всё
private fun showInviteUserPopUp(){
// Vytvoření dialogu
val dialog = Dialog(this)
dialog.setContentView(R.layout.company_manager_invite_popup)
// Nastavení velikosti dialogu
dialog.window?.setLayout(
(resources.displayMetrics.widthPixels * 0.95).toInt(),
(resources.displayMetrics.heightPixels * 0.85).toInt()
)
// Reference na prvky v popup layoutu
val inviteButton = dialog.findViewById(R.id.invite_user_button)
val userToInvite = dialog.findViewById(R.id.user_to_invite)
//akce pri kliknuti na tlacitka invite
inviteButton.setOnClickListener {
val emailOfUser = userToInvite.text.toString().trim()
findUserByEmail(emailOfUser) { uid ->
if (uid != null) {
sendInvite(uid)
} else {
Toast.makeText(
this,
"User not found",
Toast.LENGTH_SHORT
).show()
}
dialog.dismiss()
}
}
dialog.show()
}
Код: Выделить всё
{
"companies": {
"-OF8g0gzObjssaWcykla": {
"name": "test",
"users": {
"6DsKz7vXhba67GyVUkRB6br4np72": {
"status": "online"
}
}
},
"-OFCg1E5gxhNFRY-v2YR": {
"name": "test2",
"users": {
"1oBt5qUusXcJd8Wvzf6JAZRcecx2": {
"status": "offline"
}
}
}
},
"users": {
"6DsKz7vXhba67GyVUkRB6br4np72": {
"companies": {
"-OF8g0gzObjssaWcykla": {
"Authorization": "manager",
"companyName": "test"
}
},
"email": "test@gmail.com",
"username": "Aloegarden"
},
"srFA1euZPXfjQMUvwTQFA31MsVE3": {
"email": "test2@gmail.com",
"username": "misa"
}
}
}
Код: Выделить всё
"users": {
"srFA1euZPXfjQMUvwTQFA31MsVE3": {
"email": "test2@gmail.com",
"username": "misa",
"invites": {
"from": "-OF8g0gzObjssaWcykla"
}
}
}
Я пробовал разные методы обновления базы данных, например, вместо setValues(), который я использовал толкать(). Что действительно странно, так это то, что у меня есть похожие запросы в других частях кода, которые работают нормально и скопировали точный метод обновления, но в данном случае он не работает. Я вызываю этот метод в другом методе, который используется в диалоговом окне, так что, возможно, это связано с этим. Также всплывающее сообщение «Приглашение отправлено!» отображается, поэтому мне очень сложно найти ошибку.
Подробнее здесь: https://stackoverflow.com/questions/793 ... fter-query
Мобильная версия