直接引用 XML 个元素(在 kotlin 中)
Reference XML elements directly (in kotlin)
我正在查看一个旧项目,发现我无法重新创建以下项目:
var name = name.text.toString()
其中 name.text = 我的 activity_main 中的一个 EditText 元素 ID。
我知道这曾经有效。
我问是因为在我的 RealTime Firebase 中,我想根据文本值查询不同子项的条目:
例如:
ref.child("Main").child(edit-text-string data).setValue(some other edit-text-string data)
我明白了,我需要通过 id 找到元素,
我尝试通过 id 找到 edittext,将其分配给一个变量,然后将 value.toString() 传递给 child() 但以下代码抛出以下错误
val text = findViewById<EditText>(R.id.name)
val value = text.toString()
ref.child("main").child(value.toString()).setValue("testdata")
this throws an error com.google.firebase.database.DatabaseException: Invalid Firebase Database path: androidx.appcompat.widget.AppCompatEditText{3b54811 VFED..CL. .F...... 0,0-1440,85 #7f0801d9 app:id/name aid=1073741824}. Firebase Database paths must not contain '.', '#', '$', '[', or ']'
因为它仍然将值解释为对象(?)
你能想出一种方法来使用用户的文本创建子 'headers' 吗?
您的旧项目似乎正在使用现已弃用 Kotlin Synthetics which allowed you to access XML views simply by specifying their ids but its deprecated now and no longer added automatically by Android Studio to a new project, that is why you have to use findViewById
instead, its recommended that you migrate to ViewBinding。
除此之外,您的代码中还有一些问题。
where name.text = an EditText element id in my activity_main.
这是错误的,元素id是name
,name.text
指的是EditText
的文字属性。
当您从 EditText 获取文本时
val text = findViewById<EditText>(R.id.name)
这为您提供了对 EditText
的引用,如果您想将其 text
属性 的值设为 String
,则必须编写 text.text.toString()
。 text.toString()
在 EditText
对象上调用 toString
我正在查看一个旧项目,发现我无法重新创建以下项目:
var name = name.text.toString()
其中 name.text = 我的 activity_main 中的一个 EditText 元素 ID。
我知道这曾经有效。
我问是因为在我的 RealTime Firebase 中,我想根据文本值查询不同子项的条目:
例如:ref.child("Main").child(edit-text-string data).setValue(some other edit-text-string data)
我明白了,我需要通过 id 找到元素,
我尝试通过 id 找到 edittext,将其分配给一个变量,然后将 value.toString() 传递给 child() 但以下代码抛出以下错误
val text = findViewById<EditText>(R.id.name)
val value = text.toString()
ref.child("main").child(value.toString()).setValue("testdata")
this throws an error com.google.firebase.database.DatabaseException: Invalid Firebase Database path: androidx.appcompat.widget.AppCompatEditText{3b54811 VFED..CL. .F...... 0,0-1440,85 #7f0801d9 app:id/name aid=1073741824}. Firebase Database paths must not contain '.', '#', '$', '[', or ']'
因为它仍然将值解释为对象(?)
你能想出一种方法来使用用户的文本创建子 'headers' 吗?
您的旧项目似乎正在使用现已弃用 Kotlin Synthetics which allowed you to access XML views simply by specifying their ids but its deprecated now and no longer added automatically by Android Studio to a new project, that is why you have to use findViewById
instead, its recommended that you migrate to ViewBinding。
除此之外,您的代码中还有一些问题。
where name.text = an EditText element id in my activity_main.
这是错误的,元素id是name
,name.text
指的是EditText
的文字属性。
当您从 EditText 获取文本时
val text = findViewById<EditText>(R.id.name)
这为您提供了对 EditText
的引用,如果您想将其 text
属性 的值设为 String
,则必须编写 text.text.toString()
。 text.toString()
在 EditText
对象上调用 toString