我决定用Kotlin编写小程序。现在我有一个无法解决的问题。这是由于NullPointerException。而且Logcat总是在我编写此textView_msg!!.text = "${currencyList[p2]}"
的行中向我显示错误。请帮我。
这是我的代码
open class CurrencyActivity : AppCompatActivity() {
open var textView_msg: TextView? = null
open var textView: TextView? = null
open val currencyList = arrayOf("AUD","CAD","CHF","EUR","GBP","JPY","NZD","KHR","USD","CNY","THB","INR")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.currency_activty)
setUpSpinnerData()
}
//This method will be invoked to setup data of the spinner views
//to show lists of currency types for selection
fun setUpSpinnerData() {
textView_msg = findViewById(R.id.setCurrencyFrom) as TextView
textView = findViewById(R.id.setCurrencyTo) as TextView
val spFrom: Spinner = findViewById(R.id.fromCurrency)
spFrom.onItemSelectedListener = ItemSelectedFrom()
val afrom: ArrayAdapter<String> = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, currencyList)
spFrom.adapter = afrom
val spTo: Spinner = findViewById(R.id.toCurrency)
spTo.onItemSelectedListener = ItemSelectedTo()
val ato: ArrayAdapter<String> = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, currencyList)
spTo.adapter = ato
}
class ItemSelectedFrom: CurrencyActivity(), AdapterView.OnItemSelectedListener {
override fun onNothingSelected(p0: AdapterView<*>?) {}
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
//textView_msg = findViewById(R.id.setCurrencyFrom) as TextView
textView_msg!!.text = "${currencyList[p2]}"
}
}
class ItemSelectedTo : CurrencyActivity(), AdapterView.OnItemSelectedListener {
override fun onNothingSelected(p0: AdapterView<*>?) {}
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
//textView = findViewById(R.id.setCurrencyTo) as TextView
textView!!.text = "${currencyList[p2]}"
}
}
}`
答案 0 :(得分:2)
是的,我做到了。感谢所有试图帮助我的人。我只是稍微重写了一下(但是在注释中我有一个旧代码)。这是我的解决方法。
class CurrencyActivity : AppCompatActivity() {
var textView_msg: TextView ?= null
var textView: TextView ?= null
var currencyList = arrayOf("AUD","CAD","CHF","EUR","GBP","JPY","NZD","KHR","USD","CNY","THB","INR")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.currency_activty)
setUpSpinnerData()
}
//This method will be invoked to setup data of the spinner views
//to show lists of currency types for selection
fun setUpSpinnerData() {
val spFrom: Spinner = findViewById(R.id.fromCurrency)
spFrom.onItemSelectedListener = onItemSelectedListener0
val afrom: ArrayAdapter<String> = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, currencyList)
spFrom.adapter = afrom
val spTo: Spinner = findViewById(R.id.toCurrency)
spTo.onItemSelectedListener = onItemSelectedListener1
val ato: ArrayAdapter<String> = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, currencyList)
spTo.adapter = ato
}
var onItemSelectedListener0: OnItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
textView_msg = findViewById(R.id.LALALALA)
Log.e("KUKU", currencyList[position])
textView_msg?.text = "${currencyList[position]}"
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
var onItemSelectedListener1: OnItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
textView = findViewById(R.id.NANANANA)
textView?.text = "${currencyList[position]}"
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
// class ItemSelectedFrom: CurrencyActivity(), AdapterView.OnItemSelectedListener {
// override fun onNothingSelected(p0: AdapterView<*>?) {}
//
// override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
// textView_msg = findViewById(R.id.LALALALA)
// Log.e("KUKU", currencyList[position])
// textView_msg?.text = "${currencyList[position]}"
// }
// }
//
// class ItemSelectedTo : CurrencyActivity(), AdapterView.OnItemSelectedListener {
// override fun onNothingSelected(p0: AdapterView<*>?) {}
//
// override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
// textView = findViewById(R.id.NANANANA)
// textView?.text = "${currencyList[position]}"
// }
// }
}
现在是什么问题。解释。
var textView_msg: TextView ?= null
// Initialize it somewhere.
textView_msg?.text = "${currencyList[position]}" // Calls setText if textView_msg != null
textView_msg!!.text = "${currencyList[position]}" // Throws an exception if textView_msg == null