Java 在Android中搜索不起作用

Java 在Android中搜索不起作用,java,android,nullpointerexception,android-searchmanager,Java,Android,Nullpointerexception,Android Searchmanager,我已经为android的搜索功能挣扎了好几天了。无法精确定位错误 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_exclude_list); ....... SearchView searchView = (SearchView)findView

我已经为android的搜索功能挣扎了好几天了。无法精确定位错误

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_exclude_list);

    .......

    SearchView searchView = (SearchView)findViewById(R.id.options_menu_main_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    if(null!=searchManager ) {
      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }

    handleIntent(getIntent());

}

@Override
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    handleIntent(intent);
}

private void handleIntent(Intent intent) {
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        Log.i("q",query);
    }
}
searchable.xml

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
 android:hint="@string/search_hint"
 android:includeInGlobalSearch="false"
 android:label="@string/app_name"
 android:searchSettingsDescription="@string/search_hint" />
第64行:
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())

如果我删除

 SearchView searchView = (SearchView)findViewById(R.id.options_menu_main_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    if(null!=searchManager ) {
      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }

搜索正在工作,但当我在搜索中输入时,我无法获取/记录任何查询。

您正在尝试初始化
onCreate
方法中的
MenuItem
。您应该在
onCreateOptions菜单中将其初始化为:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.options_menu_main_search).getActionView();
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    if(null!=searchManager ) {
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }
}  
请参阅文档中的主题,特别是配置搜索小部件部分。另外,由于您没有使用
AppCompat
库,因此应该使用此类(如中所述):


第64行
排除列表中的内容。java
searchView
必须为空。你确定它在
活动排除列表
布局中,并且id为:
选项菜单\u主搜索
?你是否使用
操作活动
作为活动扩展?@Fllo:不。只需
公共类排除列表扩展活动{}
@好奇的编码器,更改不会有任何区别,因为你有一个NPE。您需要在创建选项菜单中初始化搜索视图。读同样的“非常感谢!!它正在工作。:)
Caused by: java.lang.NullPointerException
  at com.xyz.Exclude_list.onCreate(Exclude_list.java:64)
 SearchView searchView = (SearchView)findViewById(R.id.options_menu_main_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    if(null!=searchManager ) {
      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.options_menu_main_search).getActionView();
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    if(null!=searchManager ) {
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }
}  
android:actionViewClass="android.widget.SearchView"