当前位置: 首页 > 知识库问答 >
问题:

Kotlin.TypeCastException:null不能强制转换为非null类型

王高超
2023-03-14

我正在尝试初始化菜单上的自定义搜索工具(3d库),但我得到了错误。

 override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.base_nav_drawer,menu)
      searchItem= menu?.findItem(R.id.srchbar_menu)!!
            global_search= searchItem.actionView as MaterialSearchBar
       lastsuggestions=ArrayList<String>()
        loadSuggest()
global_search.lastSuggestions=lastsuggestions
        return true
    }
kotlin.TypeCastException: null cannot be cast to non-null type com.mancj.materialsearchbar.MaterialSearchBar
        at com.example.sg772.foodorder.BaseNavDrawerActivity.onCreateOptionsMenu(BaseNavDrawerActivity.kt:136)
 global_search= searchItem.actionView as? MaterialSearchBar

但这无助于第136行对应于global_search=searchem.actionview as materialsearchbar

菜单的xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/srchbar_menu"
          android:title="search"
          android:icon="@drawable/ic_search_black_24dp"
          app:showAsAction="ifRoom|collapseActionView"
          app:actionViewClass="com.mancj.materialsearchbar.MaterialSearchBar"/>
</menu>

共有1个答案

鞠宏恺
2023-03-14

这行会让你的应用崩溃

global_search = searchItem.actionView as MaterialSearchBar

因为searchitem.actionview始终返回null并且global_search类型是materialsearchbar(非null类型)。您将null分配给非null类型,这就是应用程序崩溃的原因。

您可以将代码更改为

var global_search: MaterialSearchBar? = null

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.base_nav_drawer,menu)
    searchItem= menu?.findItem(R.id.srchbar_menu)!!
    global_search = searchItem.actionView as MaterialSearchBar?
    lastsuggestions=ArrayList<String>()
    loadSuggest()
    global_search.lastSuggestions=lastsuggestions
    return true
}

这里有一个您可以尝试的变通解决方案。

https://github.com/mancj/materialsearchbar/issues/107

 类似资料: