【问题标题】:Typecasting Error in Kotlin: ArrayListKotlin 中的类型转换错误:ArrayList
【发布时间】:2018-07-13 02:36:12
【问题描述】:

我正在创建一个音乐播放器应用程序,其中有一个回收器视图和许多片段。我的 MainScreenFragment.kt 文件出现错误。我检查了错误日志,它显示的错误是:

******由:kotlin.TypeCastException:null 不能转换为非 null 类型 kotlin.collections.ArrayList /* = java.util.ArrayList */
在 com.thepanku.musicplayer.Fragments.MainScreenFragment.onCreateView(MainScreenFragment.kt:60) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)******

错误的原因是什么,任何帮助都是可观的。我受够了这个错误。

代码如下:

class MainScreenFragment : Fragment() {


var getSongList : ArrayList<Songs>? = null
var nowPlayingBottomBar: RelativeLayout?=null
var playPauseButton: ImageView?=null
var songTitle: TextView?=null
var visibleLayout: RelativeLayout?=null
var noSongs: RelativeLayout?=null
var recyclerView: RecyclerView?= null

var myActivity:Activity?=null

var _mainScreenAdapter : MainScreenAdapter?=null

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {

    val view = inflater?.inflate(R.layout.content_main, container, false)
    setHasOptionsMenu(true)
    activity.title = "All songs"
    visibleLayout = view?.findViewById<RelativeLayout>(R.id.visibleLayout)
    noSongs = view?.findViewById<RelativeLayout>(R.id.noSongs)
    nowPlayingBottomBar = view?.findViewById<RelativeLayout>(R.id.hiddenBarMainScreen)
    songTitle = view?.findViewById<TextView>(R.id.songTitleMainScreen)
    playPauseButton = view?.findViewById<ImageButton>(R.id.playpauseButton)
    (nowPlayingBottomBar as RelativeLayout).isClickable = false
    recyclerView = view?.findViewById<RecyclerView>(R.id.contentMain)

    visibleLayout?.visibility = View.INVISIBLE
    noSongs?.visibility = View.VISIBLE



   //getting error on this line->
   _mainScreenAdapter = MainScreenAdapter(getSongList as ArrayList<Songs>, activity)
    val mLayoutManager = LinearLayoutManager(activity)
    (recyclerView as RecyclerView).layoutManager = mLayoutManager
    (recyclerView as RecyclerView).itemAnimator = DefaultItemAnimator()
    (recyclerView as RecyclerView).adapter = _mainScreenAdapter
    return view




}

fun getSongsFromPhone(): ArrayList<Songs>{
    var arrayList = ArrayList<Songs>()
    var contentResolver = myActivity?.contentResolver
    var songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    var songCursor = contentResolver?.query(songUri, null, null, null, null)
    if(songCursor!=null && songCursor.moveToFirst()){
        val songId = songCursor.getColumnIndex(MediaStore.Audio.Media._ID)
        val SongTitle = songCursor.getColumnIndex((MediaStore.Audio.Media.TITLE))
        val songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)
        val songData = songCursor.getColumnIndex(MediaStore.Audio.Media.DATA)
        val dateIndex = songCursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED)

        while(songCursor.moveToNext()){
            var currentId = songCursor.getLong(songId)
            var currentTitle = songCursor.getString(SongTitle)
            var currentArtist = songCursor.getString(songArtist)
            var currentData = songCursor.getString(songData)
            var currentDate = songCursor.getString(dateIndex)
        }
    }
    return arrayList
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    getSongList = getSongsFromPhone()

}


override fun onAttach(context: Context?) {
    super.onAttach(context)
    myActivity = context as Activity
}

override fun onAttach(activity: Activity?) {
    super.onAttach(activity)
    myActivity = activity
}

}// 必需的空公共构造函数

【问题讨论】:

    标签: android arrays arraylist casting kotlin


    【解决方案1】:

    你有

    var getSongList : ArrayList<Songs>? = null
    

    然后你说

    getSongList as ArrayList<Songs>
    

    很明显,getSongListnull,但您坚持将其转换为非空类型ArrayList&lt;Song&gt;。您希望它将在onCreateActivity 中初始化,但显然在您的onCreateView 被调用时还没有轮到回调。

    很遗憾听到您厌倦了这个错误,并希望您能够为您的getSongList 提供一个非空值,例如通过调用getSongsFromPhone()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2018-12-16
      相关资源
      最近更新 更多