Android Studio将Java转换为Kotlin 2错误
将Java文件转换为Kotlin文件后,在同一行中给出了两个错误:在下面的代码中显示变量和带有错误的函数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
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
...
}