SetSupportActionBar () throws a Nullpointer exception

I am new to android and I followed the following guide for the Material Design toolbar:

http://www.android4devs.com/2014/12/how-to-make-material-design-app.html 

But after implementing the code. The following error was shown in logcat:

 04-01 19:16:10.214 2246-2253/com.example.bhaskar.ddit_results E/art﹕ Failed sending reply to debugger: Broken pipe 04-01 19:16:11.985 2246-2246/com.example.bhaskar.ddit_results E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.bhaskar.ddit_results, PID: 2246 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bhaskar.ddit_results/com.example.bhaskar.ddit_results.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) 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:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:95) at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:88) at android.support.v7.internal.app.ToolbarActionBar.<init>(ToolbarActionBar.java:84) at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:175) at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92) at com.example.bhaskar.ddit_results.MainActivity.onCreate(MainActivity.java:41) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) 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:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

which is caused by NullPointerException. I am using Android Studio 1.0.1.

styles.xml:

 <resources> <!-- Base application theme. --> <style name="MyTheme" parent="MyTheme.Base"> </style> <style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">#ff32cd32</item> <item name="colorPrimaryDark">#ff04cd2c</item> <item name="colorAccent">#ff4081</item> </style> 

v21 / styles.xml:

 <resources> <style name="MyTheme" parent="MyTheme.Base"> <item name="android:windowContentTransitions">true</item> <item name="android:windowAllowEnterTransitionOverlap">true</item> <item name="android:windowAllowReturnTransitionOverlap">true</item> <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> <item name="android:windowSharedElementExitTransition">@android:transition/move</item> 

In toolbar.xml, I have:

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" android:elevation="4dp"/> 

I also included the toolbar layout in the activity_main.xml file. In MainActivity.java:

 public class MainActivity extends ActionBarActivity { .... private Toolbar toolbar; public static final int RECORD_ENTRY_REQUEST_CODE=3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set our view from the "main" layout resource toolbar = (Toolbar)findViewById(R.id.toolbar); //Toolbar will now take on default actionbar characteristics setContentView(R.layout.activity_main); setSupportActionBar(toolbar); setTitle("DDIT_Results"); .... } 

I searched for this problem and did not come up with any solutions. I hope someone finds out this error and has a quick answer for it - otherwise I can provide additional information if requested. Any help would be assigned.

+7
android
source share
4 answers

You need to call setContentView BEFORE adding any View , such as the Toolbar .

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // <-- call this first toolbar = (Toolbar)findViewById(R.id.toolbar); // <-- setup views after setSupportActionBar(toolbar); setTitle("DDIT_Results"); } 

See the official Android developers blog here: http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

Action bar

To use the toolbar as an action bar, first turn off the Action Bar decor. The easiest way is to extend your Theme.AppCompat.NoActionBar theme (or its easy version).

Second, create an instance of the toolbar, usually using your XML layout:

 <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> 

Height, width, background, etc. completely up to you; these are just good examples. Since the toolbar is just a ViewGroup, you can style and position it however you want.

Then, in your activity or fragment, set the toolbar as the Action Bar:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.blah); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); } 

From now on, all menu items are displayed on the toolbar, filled through the callbacks of the standard options menu.

+14
source share

Before adding a toolbar, you need to remove the action from your style, for example

  <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowActionBar">false</item> <item name="android:windowNoTitle">true</item> </style> 

Now define the toolbar in res / xml / toolbar.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/appbar" android:theme="@style/AppTheme" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" /> 

Now include this toolbar in our xml action layout like

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <include android:id="@+id/tool_bar" layout="@xml/toolbar" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout> 

Note. . When defining a toolbar in action, we will use "tool_bar" as id, not "appbar" id

 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar actionbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(actionbar); } } 

Now you can see your activities on the toolbar

+3
source share

just import

 android.support.v7.widget.Toolbar; 

not android.widget.Toolbar;

+1
source share

Be sure to add a theme to the action inside the manifest.

  <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

then define these attributes for the theme indicated above in style.xml

  <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> 

FROM

0
source share

All Articles