CSBossmann
CSBossmann

Reputation: 201

Unresolved reference for Firestore reference in Android Kotlin

I am trying to pass on the text selection of the user as a string to convert it to the document path of my Firestore collection.

Unfortunately, I get the error message:

Variable 'enteredText' must be initialized in line

val docRef = db.collection("storage").document(enteredText) 

and the "(enteredText)" is underlined in red.

Does anyone know how to fix it?

package com.example.servus

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase

import android.view.View
import android.widget.ArrayAdapter
import android.widget.AutoCompleteTextView
import android.widget.Button
import android.widget.Toast


class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val autotextView
            = findViewById<AutoCompleteTextView>(R.id.autoTextViewStart)
    val autotextViewZiel
            = findViewById<AutoCompleteTextView>(R.id.autoTextViewZiel)


    // Get the array of languages
    val languages
            = resources.getStringArray(R.array.Languages)
    // Create adapter and add in AutoCompleteTextView
    val adapter
            = ArrayAdapter(this,
        android.R.layout.simple_list_item_1, languages)
    autotextView.setAdapter(adapter)
    autotextViewZiel.setAdapter(adapter)

    var enteredText: String


    val button
            = findViewById<Button>(R.id.btn); if (button != null)
    {
        button.setOnClickListener(View.OnClickListener {
            enteredText =
                autotextView.getText().toString() 
            Toast.makeText(this@MainActivity, enteredText, Toast.LENGTH_SHORT).show()
        })
    }


    // getString(R.string.submitted_lang)

    val db = Firebase.firestore

    val value1= findViewById(R.id.value1) as TextView
    val value2= findViewById(R.id.value2) as TextView
    val value3= findViewById(R.id.value3) as TextView


    val docRef = db.collection("storage").document(enteredText)

    docRef.get()
       .addOnSuccessListener { document ->
           if (document !=null) {
                Log.d("exist", "DocumentSnapshot data: ${document.data}")

               value1.text = document.getString("value1")
               value2.text = document.getString("value2")
               value3.text = document.getString("value3")
           } else {
               Log.d("noexist", "No such docoument")
           }
       }
       .addOnFailureListener { exception ->
            Log.w("notexisting", "Error getting documents.", exception)
       }
}

}

Upvotes: 0

Views: 591

Answers (1)

Alex Mamo
Alex Mamo

Reputation: 138824

You have the "enteredText" variable underlined in red because you didn't initialize it. You can either declare it as a member of the class:

private lateinit var enteredText: String

Using the lateinit keyword, meaning that you'll have to provide a value later in your code, or you can assign a value once you declare it:

var enteredText: String = ""

Edit:

val button
        = findViewById<Button>(R.id.btn); if (button != null)
{
    button.setOnClickListener(View.OnClickListener {
        enteredText =
            autotextView.getText().toString() 
        Toast.makeText(this@MainActivity, enteredText, Toast.LENGTH_SHORT).show()

    val db = Firebase.firestore

    val value1= findViewById(R.id.value1) as TextView
    val value2= findViewById(R.id.value2) as TextView
    val value3= findViewById(R.id.value3) as TextView

    val docRef = db.collection("storage").document(enteredText)
    docRef.get()
       .addOnSuccessListener { document ->
           if (document !=null) {
                Log.d("exist", "DocumentSnapshot data: ${document.data}")

               value1.text = document.getString("value1")
               value2.text = document.getString("value2")
               value3.text = document.getString("value3")
           } else {
               Log.d("noexist", "No such document")
           }
       }
       .addOnFailureListener { exception ->
            Log.w("notexisting", "Error getting documents.", exception)
       }
    })

Upvotes: 1

Related Questions