Android Studio 将 Java 转换为 Kotlin 2 错误

标签 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
     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) 有错误: enter image description here

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

有什么解决办法吗?

提前致谢

最佳答案

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/

相关文章:

用于微调器的 Android Kotlin onItemSelectedListener 不起作用

重构 Kotlin 代码时,Android Studio 3.0 Preview Missing Imports

kotlin - 如何为 Retrofit @Query 参数使用自定义类型?

java - 通过代码确定对象是否是在静态上下文中创建的

java - android中如何使用特殊字符进行搜索

android - 如何删除 android studio 中的 lint 错误

java - Rx 运算符。忽略直到发出下一个

android - 如何在kotlin中获得许可结果

android - crtbegin.o 和 crtbegin_dynamic.o 是什么?

android - 启动 Activity 时禁用方向动画