Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android错误[尝试在空对象引用上调用虚拟方法';void Android.app.ActionBar']_Android - Fatal编程技术网

Android错误[尝试在空对象引用上调用虚拟方法';void Android.app.ActionBar']

Android错误[尝试在空对象引用上调用虚拟方法';void Android.app.ActionBar'],android,Android,我有一个代码模块,它实现了带有导航抽屉的viewpager,但是,当我运行代码时,我得到了以下错误 01-26 09:20:02.958: D/AndroidRuntime(18779): Shutting down VM 01-26 09:20:02.959: E/AndroidRuntime(18779): FATAL EXCEPTION: main 01-26 09:20:02.959: E/AndroidRuntime(18779): Process: com.example.tabwi

我有一个代码模块,它实现了带有导航抽屉的viewpager,但是,当我运行代码时,我得到了以下错误

01-26 09:20:02.958: D/AndroidRuntime(18779): Shutting down VM
01-26 09:20:02.959: E/AndroidRuntime(18779): FATAL EXCEPTION: main
01-26 09:20:02.959: E/AndroidRuntime(18779): Process: com.example.tabwithslidingdrawer, PID: 18779
01-26 09:20:02.959: E/AndroidRuntime(18779): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tabwithslidingdrawer/com.example.tabwithslidingdrawer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.ActivityThread.access$800(ActivityThread.java:148)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.os.Handler.dispatchMessage(Handler.java:102)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.os.Looper.loop(Looper.java:135)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.ActivityThread.main(ActivityThread.java:5312)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at java.lang.reflect.Method.invoke(Native Method)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at java.lang.reflect.Method.invoke(Method.java:372)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
01-26 09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779):    at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.Activity.performCreate(Activity.java:5953)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
01-26 09:20:02.959: E/AndroidRuntime(18779):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
01-26 09:20:02.959: E/AndroidRuntime(18779):    ... 10 more
指向这条线

// enabling action bar app icon and behaving it as a toggle button
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);
整个代码

我的舱单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tabwithslidingdrawer"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Tabwithpager" >
        <activity
            android:name="com.example.tabwithslidingdrawer.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

================================================================== 编辑/更新:

我从中学到了什么

每当发生这种错误时

1。检查正在使用的活动类型,是简单的android.app活动还是AppCompatActivity或ActionBarActivity等。

2。检查扩展的活动类型是否属于compat类别

例如,基于android.app的活动/片段是非appCompat类型, 鉴于android.support.v4.app.Fragment或android.support.v4.app.ActivityCompat 是否基于appCompat

如果它属于appCompat,则使用getSupportActionBar() 对于android.app类型,我们可以使用getActionBar()

3。检查清单文件中应用于相关活动的主题

例如: 如果应用了主题,则在清单文件中 android:theme=“@android:style/theme.Holo.Dialog” getActionBar()将起作用

但是如果清单中的活动应用的主题如下 android:theme=“@style/theme.AppCompat.Light” 那么你必须使用 getSupportActionBar()

尝试执行以下操作:

                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                getSupportActionBar().setHomeButtonEnabled(true);
                actionBar = getSupportActionBar();
                actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
与此相反:

actionBar = getSupportActionBar();
                actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                getSupportActionBar().setHomeButtonEnabled(true);

您的代码正在抛出
com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)

问题很简单-您的
活动
继承自新的。您应该使用呼叫来代替

如果您在代码的第65行周围查看,您将看到您已经在这样做了:

        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        // TODO: Remove the redundant calls to getSupportActionBar()
        //       and use variable actionBar instead
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
然后沿着第87行下降,看起来你也得出了同样的结论:

        getSupportActionBar().setTitle(
                        Html.fromHtml("<font color=\"black\">" + mTitle + " - "
                                        + menutitles[0] + "</font>"));
        // getActionBar().setTitle(mTitle +menutitles[0]);
getSupportActionBar().setTitle(
Html.fromHtml(“+mTitle+”--”
+菜单项[0]+“”);
//getActionBar().setTitle(mTitle+menutilites[0]);

请注意您是如何注释掉的
getActionBar()

我想您要做的是强制转换getActivity()。例如:

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true)

这就是您需要对新支持库执行的操作。AppCompatActivity已取代ActionBarActivity。

如果有人想使用android.app.ActionBar和android.app.Activity,您应该在style.xml中更改应用程序主题,例如:

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

问题是您可能正在使用AppCompat主题

另一方面,如果您想使用android.support.v7.app.ActionBar并使用AppCompatActivity扩展活动,则必须使用AppCompat主题来避免此问题,例如:

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">


希望这有帮助

对于低级别活动,向上按钮通常被激活。在你的清单中,我只看到主要活动。 我认为在主要活动中激活向上按钮没有意义。 创建一个活动,然后在清单中添加parentActivityName属性。 然后激活活动的onCreate方法上的向上按钮。
这应该会有所帮助。

对于拥有BaseActivity及其扩展子级的任何其他人,请确保在执行任何操作之前先调用super.onCreate()。如果之后调用super.onCreate(),则旧的活动将起作用

孩子扩展活动-可以在你完成任务后调用super 孩子的活动-你得先打电话给super
当您扩展appcompatActivity时,请使用

this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
当您扩展ActionBar时,请使用

this.getActionBar().setDisplayHomeAsUpEnabled(true);

初始化工具栏/actionbar后,不要忘记在oncreate中调用此函数。如果您使用的是android.app.actionbar和android.app.Activity,则应在应用程序标记中更改应用程序主题:

< application
     android:theme="@android:style/Theme.Holo.Light">
<应用程序
android:theme=“@android:style/theme.Holo.Light”>

对于仍然存在此问题的用户,我的问题已在AndroidManifest.xml文件中得到解决。当它显示
时,您需要删除
NoActionBar
,使其成为
,因为使用NoActionBar设置,当您在MainActivity中调用一个操作栏时,应用程序不知道它是否需要一个操作栏。java

尝试在此处检查

res>>值>>样式.xml

确保没有这样的代码

<item name="windowActionBar">false</item>
false

如果有类似的代码,您可以禁用一段时间,或者在活动的这一行中删除它:

super.onCreate(savedInstanceState);
setContentView(R.layout.Activity_Main);
使用以下命令:

super.onCreate(savedInstanceState);
setContentView(R.layout.*);

*
是您的活动吗

在我的情况下,我也有同样的错误,但我的错误是我没有声明我的工具栏

因此,在使用getSupportActionBar之前,我必须找到我的工具栏并设置actionBar

    appbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(appbar);

    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_nav_menu);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

在我的例子中是因为
style.xml
设置了错误的父主题,即
NoActionBar
主题当然
getSupportActionbar()
为空:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

将其更改为其他内容修复了它:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

使用AppCompatActivity时必须调用

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar()之前


有一次我遇到了同样的错误,我为默认工具栏(toolbar.xml)创建了一个模板,然后在另一个视图中创建了一个可折叠工具栏

我需要将可折叠工具栏添加到显示用户某些信息的视图中(如whatsapp),但findViewById方法引用的是默认工具栏(id工具栏),而不是可折叠工具栏(id工具栏)。是的,我将相同的id写入两个工具栏,因此,当我试图访问该活动时,应用程序崩溃,显示错误

我通过将可折叠工具栏的id更改为id:col_toolbar来修复错误,错误消失了,我的应用程序工作得很好

public class PageActivity extends AppCompatActivity {
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        this.getSupportActionBar().setDisplayHomeAsUpEnabled(false);

    }
}
if(getSupportActionBar() != null){
 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeButtonEnabled(true);
}
    Toolbar toolbar = findViewById(R.id.toolbar1);
    setSupportActionBar(toolbar);

    mDrawerLayout = findViewById(R.id.drawer_layout);
    mDrawerLayout = findViewById(R.id.drawer_layout);
    mDrawerLayout.setDrawerShadow(R.drawable.rectagle_with_black_outer,
            GravityCompat.START);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            toolbar, R.string.navigation_drawer_close,
            R.string.navigation_drawer_close) {
        public void onDrawerClosed(View view) {
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            invalidateOptionsMenu();
        }
    };
 ActionBar actionBar = getSupportActionBar();

        if(actionBar != null){
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if(id == android.R.id.home){
            onBackPressed();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

Toolbar toolbar = findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setTitle("");
"java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle (java.lang.CharSequence)' on a null object reference. "
setSupportActionBar (toolbar). 
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().hide();
Theme.AppCompat.Light.DarkActionBar - for Activities with Action Bar (default)
Theme.AppCompat.Light.NoActionBar - for Activities without Action Bar 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="DefaultTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<activity android:name=".Payment"
    android:theme="@style/DefaultTheme"/>

<activity android:name=".WelcomeHome"
    android:theme="@style/AppTheme.NoActionBar">