Получить данные, используя идентификатор в Firebase - PullRequest
0 голосов
/ 20 марта 2019

У меня есть список заметок, которые я сохранил в базе данных FirebaseRealtime и отобразил в recyclerView.

Нажав на элемент в списке, я открываю фрагмент, передавая ему «guid».Но так как в этом элементе все еще есть поля name, description, я хочу отобразить их во фрагменте.

Q: как мне получить остальные данные из FirebaseRealtime Databse, зная идентификатор?

class TargetEditFragment : Fragment() {

private var nameEditText: TextInputEditText? = null
private var descriptionEditText: TextInputEditText? = null
private var button: Button? = null
private var databaseReference: DatabaseReference? = null
private var presenter = TargetEditPresenter()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    arguments?.getString("guid", "")
    Log.d("some", "onCreate ${arguments?.getString("guid", "")}")
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_target_add, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    databaseReference = FirebaseDatabase.getInstance().getReference("targets")
    setupViews()
    fetchData()
}

private fun setupViews() {
    nameEditText = view?.findViewById(R.id.nameEditText)
    descriptionEditText = view?.findViewById(R.id.descriptionEditText)

    button = view?.findViewById(R.id.addNote)
    button?.setOnClickListener { addTarget() }
}

private fun addTarget() {
    val name = nameEditText?.text.toString().trim()
    val description = descriptionEditText?.text.toString().trim()

    if (!TextUtils.isEmpty(name)) {
        val id: String = databaseReference?.push()?.key.toString()
        val target = Target(guid = id, name = name, description = description)
        databaseReference?.child(id)?.setValue(target)
    } else Log.d("some", "Enter a name")
}

//Here I want to get the data name and decription
private fun fetchData() {
//        nameEditText?.text = Editable.Factory.getInstance().newEditable(target?.name ?: "name")
//        descriptionEditText?.text = Editable.Factory.getInstance().newEditable(target?.description ?: "description")
    }

companion object {

    fun newInstance(guid: String): TargetEditFragment =
        TargetEditFragment().apply {
            arguments = Bundle().apply { putString("guid", guid) }
            Log.d("some", "argumeeents $arguments")
        }
}
}

Также мой целевой класс:

data class Target(val guid: String = "",
              val name: String = "",
              val description: String= "")

enter image description here

1 Ответ

3 голосов
/ 20 марта 2019

Если вы знаете guid, то, вероятно, можете сделать что-то вроде

fun fetchData(guid: String) {
    // Attach a listener to read the data at the target id
    databaseReference?.child(guid)?.addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) { 
            // handle error
        }

        override fun onDataChange(dataSnapshot: DataSnapshot) {
            // data here 
            val data = dataSnapshot.value as HashMap<String, String>

            val desc = data["description"]

            val name = data["name"]
        }
    })
}

, dataSnapshot будет хеш-картой String -> String с именем и описанием в нем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...