Hello, help solve the problem, SearchView throws a nullPointerException. <i>

// Within which the entire activity is enclosed DrawerLayout mDrawerLayout; // ListView represents Navigation Drawer ListView mDrawerList; // ActionBarDrawerToggle indicates the presence of Navigation Drawer in the action bar ActionBarDrawerToggle mDrawerToggle; // Title of the action bar String mTitle=""; SearchView mSearchView; SearchManager searchManager; ListView mListView; private final String[] mStrings = {"Hello", "Andrey"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.list_view); mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mStrings)); mListView.setTextFilterEnabled(true); mTitle = (String) getTitle(); // Getting reference to the DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout1); mDrawerList = (ListView) findViewById(R.id.left_drawer); // Getting reference to the ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close){ /** Called when drawer is closed */ public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } /** Called when a drawer is opened */ public void onDrawerOpened(View drawerView) { getActionBar().setTitle("Выбирите тему"); invalidateOptionsMenu(); } }; // Setting DrawerToggle on DrawerLayout mDrawerLayout.setDrawerListener(mDrawerToggle); // Creating an ArrayAdapter to add items to the listview mDrawerList ArrayAdapter<String> adapter = new ArrayAdapter<String>( getBaseContext(), R.layout.drawer_list_item , getResources().getStringArray(R.array.rivers) ); // Setting the adapter on mDrawerList mDrawerList.setAdapter(adapter); // Enabling Home button getActionBar().setHomeButtonEnabled(true); // Enabling Up navigation getActionBar().setDisplayHomeAsUpEnabled(true); // Setting item click listener for the listview mDrawerList mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Getting an array of rivers String[] rivers = getResources().getStringArray(R.array.rivers); //Currently selected river mTitle = rivers[position]; // Creating a fragment object Fragment rFragment=null; switch(position){ case 0: rFragment = new RiverFragment(); break; case 1: rFragment = new RiverFragment1(); break; } // Creating a Bundle object Bundle data = new Bundle(); // Setting the index of the currently selected item of mDrawerList data.putInt("position", position); // Setting the position to the fragment rFragment.setArguments(data); // Getting reference to the FragmentManager FragmentManager fragmentManager = getFragmentManager(); // Creating a fragment transaction FragmentTransaction ft = fragmentManager.beginTransaction(); // Adding a fragment to the fragment transaction ft.replace(R.id.content_frame, rFragment); // Committing the transaction ft.commit(); // Closing the drawer mDrawerLayout.closeDrawer(mDrawerList); } }); setupSearchView(); } public void setupSearchView() { mSearchView.setIconifiedByDefault(false); mSearchView.setOnQueryTextListener(this); mSearchView.setSubmitButtonEnabled(true); mSearchView.setQueryHint("Search Here"); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } /** Handling the touch event of app icon */ @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } /** Called whenever we call invalidateOptionsMenu() */ @Override public boolean onPrepareOptionsMenu(Menu menu) { // If the drawer is open, hide action items related to the content view boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_settings).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); MenuItem searchItem = menu.findItem(R.id.menu_search); mSearchView= (SearchView) searchItem.getActionView(); return true; } @Override public boolean onQueryTextSubmit(String s) { //Toast.makeText(this, s, Toast.LENGTH_LONG).show(); return false; } @Override public boolean onQueryTextChange(String s) { if (TextUtils.isEmpty(s)) { mListView.clearTextFilter(); } else { mListView.setFilterText(s.toString()); } return true; } 

} </ i> The error itself:

Process: com.xpdev.discretmath, PID: 12087 java.lang.RuntimeException: Unable to start activity ComponentInfo {com.xpdev.discretmath / com.xpdev.discretmath.BaseActivity}: java.lang.NullPointerException at android.app.ActivityThread. performLaunchActivity (ActivityThread.java:2195) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2245) at android.app.ActivityThread.access $ 800 (ActivityThread.java:135) at android.app.ActivityThread $ H.handleMessage ( ActivityThread.java:1196) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:136) at android.app.ActivityThread.main (ActivityThread.java 11017 ) at java.lang.reflect.Method.invokeNative (Native Method) at java.lang.reflect.Method.invoke (Method.java.ln15) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 779) at com.android.internal.os.ZygoteInit.main (ZygoteInit.javament95) at dalvik.system.NativeStart.main (Native Method) Caused by: java.lang.NullPointerException a t com.xpdev.discretmath.BaseActivity.setupSearchView (BaseActivity.java:151) at com.xpdev.discretmath.BaseActivity.onCreate (BaseActivity.java:147) at android.app.Activity.performCreate (Activity.java 12.2323) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2159) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2245) at android.app.ActivityThread .access $ 800 (ActivityThread.java:135) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1196) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:136) at android.app.ActivityThread.main (ActivityThread.javaive017) at java.lang.reflect.Method.invokeNative (Native Method) at java.lang.reflect.Method.invoke (Method.java : 515) at com.android.internal.os.ZygoteInit $ MethodAndA rgsCaller.run (ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main (ZygoteInit.javaimin95) at dalvik.system.NativeStart.main (Native Method)

  • @ Kl0nLutiy, Please arrange questions according to the rules of the community, otherwise they will be deleted. - Nicolas Chabanovsky

1 answer 1

setupSearchView () is called at the end of onCreate (), but mSearchView is initialized to onCreateOptionsMenu (). Why not just call setupSearchView () immediately after mSearchView is initialized to onCreateOptionsMenu ()? It seems that onCreateOptionsMenu () is called after or during the execution of onCreate.