Android 对firebase查询使用微调器选择值
我在KOTLIN有一个Android应用程序,我想在那里过滤和显示cloud_firestore集合中的文档。我想根据用户从下拉微调器中选择的内容过滤文档。问题是我无法访问超出选定函数范围的微调器选择值。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(
如果我对字符串“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
函数中?