Android Studio将Java转换为Kotlin 2错误

Android Studio将Java转换为Kotlin 2错误,android,kotlin,Android,Kotlin,将Java文件转换为Kotlin文件后,在同一行中给出了两个错误:在下面的代码中显示变量和带有错误的函数 lateinit var ncArr: Array<ImageButton> lateinit var xBitmap: Bitmap lateinit var oBitmap: Bitmap lateinit var intArr: IntArray lateinit var btnStartGame: Button

将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
}
lateinit变量ncArr:Array
lateinit var xBitmap:位图
lateinit var oBitmap:位图
lateinit var intArr:IntArray
lateinit var btnStartGame:按钮
lateinit var btnMenu:按钮
var-stop:Boolean=false
var游戏模式:Int=0
变量umove:Int=0
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onStart()
setContentView(R.layout.activity_游戏)
ncArr=arrayOfNulls(9)
ncArr[0]=findViewById(R.id.nc0)作为ImageButton
ncArr[1]=作为ImageButton的findViewById(R.id.nc1)
ncArr[2]=作为ImageButton的findViewById(R.id.nc2)
ncArr[3]=作为ImageButton的findViewById(R.id.nc3)
ncArr[4]=findViewById(R.id.nc4)作为ImageButton
ncArr[5]=作为ImageButton的findViewById(R.id.nc5)
ncArr[6]=findViewById(R.id.nc6)作为ImageButton
ncArr[7]=作为ImageButton的findViewById(R.id.nc7)
ncArr[8]=findViewById(R.id.nc8)作为ImageButton
ncArr[0]。setOnClickListener(此)
ncArr[1]。setOnClickListener(此)
ncArr[2]。setOnClickListener(此)
ncArr[3]。setOnClickListener(此)
ncArr[4]。setOnClickListener(此)
ncArr[5]。setOnClickListener(此)
ncArr[6]。setOnClickListener(此)
ncArr[7]。setOnClickListener(此)
ncArr[8]。setOnClickListener(此)
xBitmap=BitmapFactory.decodeResource(资源,R.drawable.x)
oBitmap=BitmapFactory.decodeResource(资源,R.drawable.o)
intArr=IntArray(9)
对于(0..8中的i){
intArr[i]=0
}
btnMenu=findViewById(R.id.btnMenu)作为按钮
btnStartGame=findViewById(R.id.btnStartGame)作为按钮
btnMenu.setOnClickListener(此)
btnStartGame.setOnClickListener(此)
停止=错误
gameMode=intent.getIntExtra(“游戏模式”,1)
umove=1
}
行内
ncArr=arrayOfNulls(9)
有错误:

我试图解决这个问题,但我没有更多的想法

有解决办法吗


提前感谢您尝试将可空数组放入非空数组。您可以将
intArr
声明为
Array
,一切都将正常工作

ncArr = arrayOfNulls(9)
ncArr
的类型将是
Array

您正在使用不安全的强制转换运算符
作为
,因为如果强制转换不可行,强制转换运算符将引发异常。因此,我们称之为不安全。如果

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[8]
申请
ncArr[0]

更新:根据您的请求,您可以使用以下解决方案:

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
        ...
}
lateinit变量ncArr:Array
lateinit var xBitmap:位图
lateinit var oBitmap:位图
lateinit var intArr:IntArray
lateinit var btnStartGame:按钮
lateinit var btnMenu:按钮
var-stop:Boolean=false
var游戏模式:Int=0
变量umove:Int=0
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onStart()
setContentView(R.layout.activity_游戏)
ncArr=arrayOf(
findviewbyd(R.id.nc0).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc1).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc2).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc3).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc4).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc5).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc6).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc7).apply{setOnClickListener(this@GameActivity)},
findViewById(R.id.nc8).apply{setOnClickListener(this@GameActivity)}
)
xBitmap=BitmapFactory.decodeResource(资源,R.drawable.x)
oBitmap=BitmapFactory.decodeResource(资源,R.drawable.o)
//你的代码在这里
...
}

是这样正确的:
ncArr[0]=findViewById(R.id.nc0)
我看到了您的问题,请将
lateinit var ncArr:Array
更改为
lateinit var ncArr:Array
让我们来看看。
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
        ...
}