Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 搜索小部件,空指针?_Java_Android_Search - Fatal编程技术网

Java 搜索小部件,空指针?

Java 搜索小部件,空指针?,java,android,search,Java,Android,Search,您好,我在应用程序中实现搜索小部件时遇到问题。它似乎无法找到菜单项的“actionview”,但它可以很好地找到该项 我四处寻找答案,但还没有找到明确的解决方案 这是我用XML声明的菜单 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/group_

您好,我在应用程序中实现搜索小部件时遇到问题。它似乎无法找到菜单项的“actionview”,但它可以很好地找到该项

我四处寻找答案,但还没有找到明确的解决方案

这是我用XML声明的菜单

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/group_search_box"
    android:title="@string/search_label"
    android:icon="@drawable/ic_action_action_search"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView" />
这是我要添加的库,也许我添加了一个不正确的库

compile 'com.android.support:support-v4:+'
compile 'com.android.support:appcompat-v7:+'
最后是崩溃日志

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference
        at com.example.myapp.fragments.GroupFragment.onCreateOptionsMenu(GroupFragment.java:88)
        at android.app.Fragment.performCreateOptionsMenu(Fragment.java:1780)
        at android.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1927)
        at android.app.Activity.onCreatePanelMenu(Activity.java:2539)
        at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)
        at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:436)
        at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:800)
        at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:221)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
        at android.view.Choreographer.doCallbacks(Choreographer.java:574)
        at android.view.Choreographer.doFrame(Choreographer.java:543)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

我一直在跟踪文档,但仍然无法找出问题所在

您应该从searchManager中删除
getActivity()
,如下所示

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
     MenuItem searchItem = menu.findItem(R.id.searchMenuItem);
     SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);

     android.support.v7.widget.SearchView searchView =
            (android.support.v7.widget.SearchView) MenuItemCompat.getActionView(searchItem);

     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
     searchView.setIconifiedByDefault(false);

}

今天,我面对同样的问题,消除了如下困惑:

我还使用了以下依赖项

compile 'com.android.support:support-v4:+'
compile 'com.android.support:appcompat-v7:+'
这意味着我从
AppCompatActivity
扩展活动类,而不是
activity

所以在这个代码中

SearchView searchView =
                (SearchView) menu.findItem(R.id.action_search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));
这个,SearchView应该是,
android.support.v7.widget.SearchView
而不是
android.widget.SearchView
。这就是你的原因

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference
而且

<item
        android:id="@+id/action_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@android:drawable/ic_search_category_default"
        android:title="Search"
        app:showAsAction="always|collapseActionView" />

注意,,
是的,
app:actionViewClass
不是
android:actionViewClass

我一直面临着同样的问题,答案中提供的任何解决方案都不适合我。但是这个代码的改变对我来说很有效。 使用


请注意更改,“app:actionViewClass”已更改为“appcompat:actionViewClass”


对我来说效果不错,希望对你也一样。

检查res中的菜单文件夹。 在我的例子中,创建了两个文件 第一个原始和第二个自动创建21。
删除另一个文件问题如果发生重复,请解决

嘿,谢谢你的帮助,似乎不起作用。目前,这段代码在一个片段中,因为我只希望当片段出现在屏幕上时,搜索才可用。因此,getActivities就应运而生。作为一个测试,我把所有的代码都带到了主活动本身中,我仍然有完全相同的问题,我可以找到菜单项,但是当我尝试获取actionView时,我没有找到指针。你解决了这个问题吗?由于某种原因,这种崩溃对我来说是相当罕见的。我也得到了这个例外。当它发生时,它是完全随机的,这使得很难诊断问题。@StarWind什么部分不起作用,我不知道你的问题啊,它似乎是这个应用程序兼容的东西。我正在尝试使用“android:Theme.Material”,它不适用于AppCompative活动。真遗憾,我真的需要两者。。但我已经做了好几个小时了。@StarWind把它作为一个新问题加上,你在这方面遇到了麻烦,我弄明白了。对于我未来的同行来说,如果没有应用程序兼容库,你的理由是不正确的。将
app
更改为
appCompat
没有任何作用。这样做之所以有效,是因为app:actionViewClass=“android.support.v7.widget.SearchView”。我制作了一个
android:actionViewClass
,这就是为什么它对我不起作用的原因。@AliKazi我没有给出任何理由,我只是分享了对我起作用的解决方案。虽然我应该提供一个理由。这都与您正在使用的SDK版本有关。对于我的版本(Sdk版本25),从“android:”到“app:”的更改不起作用,但从“android:”到“appcompat:”的更改非常有效。对于您正在使用的版本,从“安卓”更改为“应用”有效。即使我也无法理解兼容性方面的这种差异。@captain.am您的解决方案最初不起作用,因为您没有在此处引用正确的命名空间属性
xmlns:appcompat=”http://schemas.android.com/apk/res-auto“
,如果您将其命名为
appcompat
appcompat
<item
        android:id="@+id/action_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@android:drawable/ic_search_category_default"
        android:title="Search"
        app:showAsAction="always|collapseActionView" />
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:appcompat="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/group_search_box"
android:title="@string/search_label"
android:icon="@drawable/ic_action_action_search"
appcompat:showAsAction="ifRoom|collapseActionView"
appcompat:actionViewClass="android.support.v7.widget.SearchView" />