Android RoboGuice 3.0 nullpointer on toolbar

106 Views Asked by At

I made an activity and want to inject my toolbar using Roboguice, but i get Nullpointer exception. Tried some solutions, but they dont work. Here is my progress.

MainActivity.java

@ContentView(R.layout.activity_main)
public class MainActivity extends RoboActionBarActivity {
    @InjectView(R.id.tool_bar)
    Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setSupportActionBar(toolbar);
    }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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=".activities.MainActivity">

    <include
        android:id="@+id/tool_bar"
        layout="@layout/tool_bar" />
    <FrameLayout
        android:layout_below="@+id/tool_bar"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activities.MainActivity"
        tools:ignore="MergeRootFrame" />
</RelativeLayout>

Manifest.xml

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.android.app">
        <application
            android:name=".application.CustomApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:replace="android:icon">
            <meta-data
                android:name="roboguice.annotations.packages"
                android:value="roboguice,databasename" />
            <activity android:name=".activities.MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

CustomApplication.java

    public class CustomApplication extends Application {
    public void onCreate() {
        super.onCreate();
        RoboGuice.setUseAnnotationDatabases(false);
    }
}

Module.gradle

 compile 'org.roboguice:roboguice:3.+'
 provided 'org.roboguice:roboblender:3.+'

App.gradle

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-AguiceAnnotationDatabasePackageName=databasename"
        }
    }
    repositories {
        jcenter()
    }
}

Logs with error

FATAL EXCEPTION: main
                                                                     Process: com.android.jammboree, PID: 4817
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.app/com.android.app.activities.MainActivity}: java.lang.NullPointerException
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
                                                                         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:5001)
                                                                         at java.lang.reflect.Method.invokeNative(Native Method)
                                                                         at java.lang.reflect.Method.invoke(Method.java:515)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                                         at dalvik.system.NativeStart.main(Native Method)
                                                                      Caused by: java.lang.NullPointerException
                                                                         at android.support.v7.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:98)
                                                                         at android.support.v7.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:91)
                                                                         at android.support.v7.app.ToolbarActionBar.<init>(ToolbarActionBar.java:73)
                                                                         at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:205)
                                                                         at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99)
                                                                         at com.android.jammboree.activities.MainActivity.onCreate(MainActivity.java:24)
                                                                         at android.app.Activity.performCreate(Activity.java:5231)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
                                                                         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:5001) 
                                                                         at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                         at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                                                                         at dalvik.system.NativeStart.main(Native Method) 
1

There are 1 best solutions below

6
IntelliJ Amiya On BEST ANSWER

NullPointerException is thrown when an application attempts to use an object reference, having the null value.

Call the id attribute in the Toolbar xml like that:

<?xml version="1.0" encoding="utf-8"?>
<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/tool_bar"
     >
</android.support.v7.widget.Toolbar>

Then remove it from the include block so it looks like this:

<include
    android:id="@+id/tool_bar"    // No need 
    layout="@layout/tool_bar" />

Then

@InjectView(R.id.tool_bar)
Toolbar toolbar;