getActionBar(),getSupportActionBar()返回java.nullpointer.exception

时间:2014-12-24 03:08:46

标签: android android-actionbar android-appcompat

我已将appcompat文件设置为projectproperties。错误日志中没有错误,也没有问题。 logcat在getActionBar中显示错误java.nullpointer.exception。当我评论该行时,应用程序运行良好。 关于如何解决这个问题需要的建议

ActionBar actionBar= getActionBar();

View cview= getLayoutInflater().inflate(R.layout.actionbar_menu, null);
actionBar.setCustomView(cview);

构建Gradle文件包含以下

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.bumpintomums"
        minSdkVersion 15
        targetSdkVersion 19
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

错误Logcat

FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bumpintomums/com.current.amnepal.bumpintomum.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
            at android.app.ActivityThread.access$600(ActivityThread.java:123)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.current.amnepal.bumpintomum.MainActivity.onCreate(MainActivity.java:83)
            at android.app.Activity.performCreate(Activity.java:4470)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
            at android.app.ActivityThread.access$600(ActivityThread.java:123)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
            at dalvik.system.NativeStart.main(Native Method)

4 个答案:

答案 0 :(得分:2)

您可以检查活动中是否应用了“主题”

如果它是没有ActionBar的主题,如果你试图获得动作栏,你将获得null。

答案 1 :(得分:1)

如果使用activity.getActionBar(),则只返回null,而不是异常。请提供您的代码和printStackTrace()

只有在调用null方法时才会出现nullpointer.exception,例如null.getActionBar()

actionbar guide for more

PS:你使用getActionBar().hide();因为getActionBar()为null,所以你的代码是null.hide(),就会发生异常。如果你想使用/隐藏actionBar,请阅读上面的指南。

<强>的NullPointerException-workround:

if(getActionBar() != null)
    getActionBar().hide();

在AndroidManifest.xml中使用主题

<activity android:theme="@style/Theme.AppCompat.Light" ... >

扩展了ActionBarActivity

public class FoorActivity extends ActionBarActivity

填写您的菜单

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}

答案 2 :(得分:0)

从我的问题中我可以得到的是,您正在为您的应用程序设计自定义操作栏,对吗?

如果是,那么下面的代码可以帮助你:

public class MainActivity extends Activity {

       @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ActionBar bar = getActionBar();
            bar.setDisplayShowTitleEnabled(false);
            bar.setDisplayShowCustomEnabled(true);
            bar.setCustomView(R.layout.row);
            bar.show();
    }
}

请注意,在操作栏上启用customenabled属性对于Actionbar实现自定义视图非常重要。

bar.setDisplayShowCustomEnabled(true)

也无需使用LayoutInflator,您可以使用

直接提供操作栏自定义布局

actionbar.setCustomView(您的布局文件

答案 3 :(得分:0)

我在Android清单文件中将主题设置为NoActionBar。此外,我的gradle构建版本和com.android.support:appcompat-v7:27.+'不同步。 看看你是否有这个问题。