Android:单击SearchView菜单图标时出现空指针异常

Android:单击SearchView菜单图标时出现空指针异常,android,android-actionbar,searchview,Android,Android Actionbar,Searchview,我在ActionBar中有SearchView菜单,因此当我单击search菜单图标时,我将看到以下内容: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable$ConstantState android.graphics.drawable.Drawable.getConstantState()' on a null object reference

我在ActionBar中有SearchView菜单,因此当我单击search菜单图标时,我将看到以下内容:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable$ConstantState android.graphics.drawable.Drawable.getConstantState()' on a null object reference
at com.android.internal.widget.ActionBarView$ExpandedActionViewMenuPresenter.expandItemActionView(ActionBarView.java:1665)
at com.android.internal.view.menu.MenuBuilder.expandItemActionView(MenuBuilder.java:1266)
at com.android.internal.view.menu.MenuItemImpl.expandActionView(MenuItemImpl.java:625)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:909)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
at android.widget.ActionMenuView.invokeItem(ActionMenuView.java:587)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:141)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Error logged: uncaught
我不明白为什么会出现这个错误。有人知道怎么解决这个问题吗

编辑:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />
    getMenuInflater().inflate(R.menu.main_page_menu, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.ac_search_gdz).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    searchMenuItem = menu.findItem(R.id.ac_search_gdz);
    searchMenuItem.setVisible(true);
    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    super.onCreateOptionsMenu(menu, inflater);
}
    ...
    <meta-data
        android:name="android.app.default_searchable"
        android:value=".ClassPage" /
    ...
    <activity
        android:name=".ClassPage" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
     <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
    </activity> 
searchable.xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />
    getMenuInflater().inflate(R.menu.main_page_menu, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.ac_search_gdz).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    searchMenuItem = menu.findItem(R.id.ac_search_gdz);
    searchMenuItem.setVisible(true);
    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    super.onCreateOptionsMenu(menu, inflater);
}
    ...
    <meta-data
        android:name="android.app.default_searchable"
        android:value=".ClassPage" /
    ...
    <activity
        android:name=".ClassPage" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
     <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
    </activity> 
菜单xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />
    getMenuInflater().inflate(R.menu.main_page_menu, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.ac_search_gdz).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    searchMenuItem = menu.findItem(R.id.ac_search_gdz);
    searchMenuItem.setVisible(true);
    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    super.onCreateOptionsMenu(menu, inflater);
}
    ...
    <meta-data
        android:name="android.app.default_searchable"
        android:value=".ClassPage" /
    ...
    <activity
        android:name=".ClassPage" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
     <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
    </activity> 

在清单中:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />
    getMenuInflater().inflate(R.menu.main_page_menu, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.ac_search_gdz).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    searchMenuItem = menu.findItem(R.id.ac_search_gdz);
    searchMenuItem.setVisible(true);
    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    super.onCreateOptionsMenu(menu, inflater);
}
    ...
    <meta-data
        android:name="android.app.default_searchable"
        android:value=".ClassPage" /
    ...
    <activity
        android:name=".ClassPage" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
     <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
    </activity> 
。。。

您正在实例化该视图吗?@lazai否,我只使用android.support.v7.widget.SearchView。请尝试以下操作:mSearchView=(SearchView)MenuItemCompat.getActionView(searchItem);如果您尚未使用MenuItemCompat;我不知道这是否可行,请您展示一些示例代码,您认为问题出在哪里?您使用的是ProGuard吗?如果是这样的话,看起来你缺少了一条规则。您还可以告诉我们您使用的是哪个版本的
v7
支持库吗?谢谢您正在实例化该视图吗?@lazai否,我只使用android.support.v7.widget.SearchView。请尝试以下操作:mSearchView=(SearchView)MenuItemCompat.getActionView(searchItem);如果您尚未使用MenuItemCompat;我不知道这是否可行,请您展示一些示例代码,您认为问题出在哪里?您使用的是ProGuard吗?如果是这样的话,看起来你缺少了一条规则。您还可以告诉我们您使用的是哪个版本的
v7
支持库吗?谢谢