修复一些Kotlin语法

时间:2017-08-31 12:31:07

标签: kotlin

我刚刚用Java构建了一个简单的Android音乐应用程序,然后我用Android Studio的Kotlin插件将java文件转换为Kotlin。

在MainActivity.kt中有一些错误

private fun display() {

    val mySongs = findSong(Environment.getExternalStorageDirectory())
    items = arrayOf(mySongs.size.toString())


    for (i in mySongs.indices) {
        items[i] = mySongs[i].name.toString().replace(".mp3", "").replace(".wav", "")
    }

    val adp = ArrayAdapter(this, android.R.layout.simple_list_item_1, items!!)

    listView!!.adapter = adp
    listView!!.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, position, l -> startActivity(Intent(applicationContext, PlayerActivity::class.java).putExtra("pos", position).putExtra("songs", mySongs)) }
}

这一行:items[i] = mySongs[i].name.toString().replace(".mp3","").replace(".wav", "")

显示错误:智能转换为'数组'是一个可变的属性,可以在这个时候改变。

和PlayerActivity.kt

val i = intent
val b = i.extras
mySongs = b.getParcelableArrayList<Parcelable>(mySongs.toString())
position = b.getInt("pos", 0)
val u = Uri.parse(mySongs!![position].toString())
mediaPlayer = MediaPlayer.create(applicationContext, u)

b.getParcelableArrayList<Parcelable>(mySongs.toString())有问题说类型不匹配。

任何人都可以帮我解决这个问题吗?谢谢

1 个答案:

答案 0 :(得分:-1)

这一行

items = arrayOf(mySongs.size.toString()) 

创建一个包含一个字符串的1元素数组,该字符串的大小为我的歌曲。例如:[“23”]

您可以使用此代替:arrayOfNulls(mySongs.size)

对于另一个问题:

mySongs = b.getParcelableArrayList<Parcelable>(mySongs.toString())

应该返回相同的类型(我假设它与主要活动中的代码相同,因为它们位于2个不同的文件中并且未提供mySongs的上下文)

val mySongs = findSong(Environment.getExternalStorageDirectory())

mySongs与findSong的结果类型相同。

你也应该使用var而不是val,因为val是不可变的