Android 对firebase查询使用微调器选择值

Android 对firebase查询使用微调器选择值,android,listview,kotlin,google-cloud-firestore,Android,Listview,Kotlin,Google Cloud Firestore,我在KOTLIN有一个Android应用程序,我想在那里过滤和显示cloud_firestore集合中的文档。我想根据用户从下拉微调器中选择的内容过滤文档。问题是我无法访问超出选定函数范围的微调器选择值。 如果我对字符串“sector”的值进行硬编码,那么应用程序将按照我所希望的方式工作,因此我知道这里的问题是每次更改时都要在onItemSelected方法之外访问此变量(sector)的值。 这是我的家庭活动。kt class HomeActivity : AppCompatActivity(

我在KOTLIN有一个Android应用程序,我想在那里过滤和显示cloud_firestore集合中的文档。我想根据用户从下拉微调器中选择的内容过滤文档。问题是我无法访问超出选定函数范围的微调器选择值。
如果我对字符串“sector”的值进行硬编码,那么应用程序将按照我所希望的方式工作,因此我知道这里的问题是每次更改时都要在onItemSelected方法之外访问此变量(sector)的值。
这是我的家庭活动。kt

class HomeActivity : AppCompatActivity() {
    val db by lazy { FirebaseFirestore.getInstance() }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_home)

        var sector = ""

        //implement sector number spinner to get current user location
        val sectors = arrayOf("1", "2", "3", "4", "5", "6", "7", "8", "9", 10)

        val sectorOption = findViewById<View>(R.id.sectorOption) as Spinner

        if(sectorOption != null){
            val sectorAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, sectors)
            sectorOption.adapter = sectorAdapter

            sectorOption.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {
                    if (parent != null) {
                        sector = parent.getItemAtPosition(position).toString()
                    }
                }
                override fun onNothingSelected(parent: AdapterView<*>?) {

                }
            }
        }

        var userList = mutableListOf<User>()
        var dataAdapter: DataAdapter?= null

        db.collection("users").whereEqualTo("sector", sector)
            .get()
            .addOnCompleteListener { task ->
                if(task.isSuccessful){
                    userList.clear()
                    for(document in task.result!!){
                        Log.d(ContentValues.TAG, "test" + document.id + "=>" + document.data)

                        userList.add(User(document.get("Name").toString(), document.get("sector").toString()))
                    }
                    dataAdapter = DataAdapter(ArrayList(userList), applicationContext)
                    listview.setAdapter(dataAdapter)
                }
            }
        }
    }
}
class HomeActivity:AppCompatActivity(){
由惰性{FirebaseFirestore.getInstance()}生成的val db
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u home)
var sector=“”
//实施扇区号微调器以获取当前用户位置
val扇区=排列(1、2、3、4、5、6、7、8、9、10)
val sectorOption=findViewById(R.id.sectorOption)作为微调器
if(扇区选项!=null){
val sectorAdapter=ArrayAdapter(这是android.R.layout.simple\u微调器项目,扇区)
sectorOption.adapter=sectorAdapter
sectorOption.onItemSelectedListener=对象:AdapterView.onItemSelectedListener{
已选择“覆盖”选项(
家长:AdapterView?,
视图:视图?,
职位:Int,
id:长
) {
如果(父项!=null){
扇区=父.getItemAtPosition(position).toString()
}
}
覆盖未选择的乐趣(家长:AdapterView?){
}
}
}
var userList=mutableListOf()
变量dataAdapter:dataAdapter?=null
db.集合(“用户”)。其中equalto(“扇区”,扇区)
.get()
.addOnCompleteListener{task->
如果(任务成功){
userList.clear()
for(任务中的文档。结果!!){
Log.d(ContentValues.TAG,“test”+document.id+“=>”+document.data)
添加(用户(document.get(“Name”).toString(),document.get(“扇区”).toString())
}
dataAdapter=dataAdapter(ArrayList(userList),applicationContext)
setAdapter(dataAdapter)
}
}
}
}
}

为什么说“我无法访问超出选定范围的微调器选择值”?这行
db.collection(“用户”)中
sector
的值是多少。其中equalto(“sector”,sector)
?@Alex Mamo,它保持为空字符串(初始化方式)。但是,如果我将初始化更改为var sector=“10”之类的值,它将按照我希望的方式工作。我是Android Kotlin新手,因此如果您认为是其他原因导致了此问题,请提出建议。您是否尝试将该查询移动到
onItemSelected
函数中?为什么您会说“我无法访问onItemSelected范围之外的微调器选择值”?这行
db.collection(“用户”)中
sector
的值是多少。其中equalto(“sector”,sector)
?@Alex Mamo,它保持为空字符串(初始化方式)。但是,如果我将初始化更改为var sector=“10”之类的值,它将按照我希望的方式工作。我是Android Kotlin的新手,因此如果您认为是其他原因导致了此问题,请提出建议。您是否尝试将该查询移动到
onItemSelected
函数中?