kotlin.TypeCastException:无法将null强制转换为非null类型

时间:2019-03-07 17:31:31

标签: android exception kotlin casting oncreateoptionsmenu

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

这是我的代码

space

Logcat消息

qryWordsResult.word

我尝试过

 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
    }

但这没有帮助 第136行对应于kotlin.TypeCastException: null cannot be cast to non-null type com.mancj.materialsearchbar.MaterialSearchBar at com.example.sg772.foodorder.BaseNavDrawerActivity.onCreateOptionsMenu(BaseNavDrawerActivity.kt:136)

菜单xml

 global_search= searchItem.actionView as? MaterialSearchBar

3 个答案:

答案 0 :(得分:1)

此行使您的应用崩溃

global_search = searchItem.actionView as MaterialSearchBar

因为searchItem.actionView总是返回null,并且global_search的类型为MaterialSearchBar(非空类型)。您将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
}

但是搜索视图未显示在您的应用上,似乎第三方不支持使用app:actionViewClass集成到菜单项中。

这是您可以尝试的解决方法。

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

答案 1 :(得分:0)

您的actionView成员很可能为空,您可能想使用:

global_search= searchItem.actionView as MaterialSearchBar?

或定义如下:

var global_search:MaterialSearchBar?= searchItem.actionView 

PS。如果您显示global_search是如何定义的

答案 2 :(得分:0)

如果这没有帮助 global_search= searchItem.actionView as? MaterialSearchBar

global_search可能被声明为不可为空

确保它是 var global_search: MaterialSearchBar? = null