将 Java 文件转换为 Kotlin 文件后,在同一行中出现两个错误:在下面的代码中显示有错误的变量和函数
lateinit var ncArr: Array<ImageButton>
lateinit var xBitmap: Bitmap
lateinit var oBitmap: Bitmap
lateinit var intArr: IntArray
lateinit var btnStartGame: Button
lateinit var btnMenu: Button
var stop: Boolean = false
var gameMode: Int = 0
var umove: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onStart()
setContentView(R.layout.activity_game)
ncArr = arrayOfNulls(9)
ncArr[0] = findViewById(R.id.nc0) as ImageButton
ncArr[1] = findViewById(R.id.nc1) as ImageButton
ncArr[2] = findViewById(R.id.nc2) as ImageButton
ncArr[3] = findViewById(R.id.nc3) as ImageButton
ncArr[4] = findViewById(R.id.nc4) as ImageButton
ncArr[5] = findViewById(R.id.nc5) as ImageButton
ncArr[6] = findViewById(R.id.nc6) as ImageButton
ncArr[7] = findViewById(R.id.nc7) as ImageButton
ncArr[8] = findViewById(R.id.nc8) as ImageButton
ncArr[0].setOnClickListener(this)
ncArr[1].setOnClickListener(this)
ncArr[2].setOnClickListener(this)
ncArr[3].setOnClickListener(this)
ncArr[4].setOnClickListener(this)
ncArr[5].setOnClickListener(this)
ncArr[6].setOnClickListener(this)
ncArr[7].setOnClickListener(this)
ncArr[8].setOnClickListener(this)
xBitmap = BitmapFactory.decodeResource(resources, R.drawable.x)
oBitmap = BitmapFactory.decodeResource(resources, R.drawable.o)
intArr = IntArray(9)
for (i in 0..8) {
intArr[i] = 0
}
btnMenu = findViewById(R.id.btnMenu) as Button
btnStartGame = findViewById(R.id.btnStartGame) as Button
btnMenu.setOnClickListener(this)
btnStartGame.setOnClickListener(this)
stop = false
gameMode = intent.getIntExtra("game_mode", 1)
umove = 1
}
行内ncArr = arrayOfNulls(9)
有错误:
我试图解决这个问题,但我没有更多的想法......
有什么解决办法吗?
提前致谢
最佳答案
ncArr = arrayOfNulls(9)
ncArr
的类型将是Array<ImageButton?>
ncArr[0] = findViewById(R.id.nc0) as ImageButton
您正在使用不安全的强制转换运算符as
,因为如果无法进行强制转换,则强制转换运算符会引发异常。因此,我们称其为不安全。如果会发生什么
findViewById(R.id.nc0) as ImageButton
返回null
,然后null
无法分配给 ImageButton
,它会抛出异常并使您的应用程序崩溃。
为了避免上述错误,您可以使用
ncArr[0] = findViewById(R.id.nc0) as ImageButton?
或使用安全转换运算符 as?
ncArr[0] = findViewById(R.id.nc0) as? ImageButton
记得申请ncArr[0]
至ncArr[8]
.
更新:根据您的请求,您可以使用以下解决方案:
lateinit var ncArr: Array<ImageButton>
lateinit var xBitmap: Bitmap
lateinit var oBitmap: Bitmap
lateinit var intArr: IntArray
lateinit var btnStartGame: Button
lateinit var btnMenu: Button
var stop: Boolean = false
var gameMode: Int = 0
var umove: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onStart()
setContentView(R.layout.activity_game)
ncArr = arrayOf(
findViewById<ImageButton>(R.id.nc0).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc1).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc2).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc3).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc4).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc5).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc6).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc7).apply{setOnClickListener(this@GameActivity)},
findViewById<ImageButton>(R.id.nc8).apply{setOnClickListener(this@GameActivity)}
)
xBitmap = BitmapFactory.decodeResource(resources, R.drawable.x)
oBitmap = BitmapFactory.decodeResource(resources, R.drawable.o)
// Your code here
...
}
关于Android Studio 将 Java 转换为 Kotlin 2 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234090/