如何修复 getActionBar 方法可能产生 java.lang.NullPointerException

2024-04-24

我在活动中使用工具栏作为操作栏。我正在尝试添加方法getActionBar().setDisplayHomeAsUpEnabled(true);到 Activity.java 文件,用于旧设备的向上导航。

该方法在 Android Studio 中产生以下错误消息:

方法调用可能会产生 java.lang.NullPointerException

工具栏上的向上导航在较新的设备上运行良好...现在我正在尝试找出如何确保它适用于较旧的设备。 请指教。

来自 build.gradle:

dependencies {
   compile "com.android.support:appcompat-v7:22.1.0"
}

来自AndroidManifest.xml:

android:theme="@style/Theme.AppCompat.NoActionBar.FullScreen" 

来自 styles.xml

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

来自 Activity.java

public class CardViewActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.cardviewinput);

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

    if (toolbar != null) {
        // Up navigation to the parent activity for 4.0 and earlier
        getActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationIcon(R.drawable.ic_action_previous_item);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }

}

实际上 Android Studio 不会向您显示“错误消息”,它只是一个警告。

一些答案建议使用断言,Dalvik 运行时有断言 https://stackoverflow.com/a/5590378/3743265默认情况下关闭,因此您必须实际打开它才能真正执行某些操作。在这种情况下(断言被关闭),您实际上所做的只是欺骗 Android Studio 不向您显示警告。另外,我不喜欢在生产代码中使用“assert”。

在我看来,你应该做的事情很简单。

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

Update:如果您使用的是操作栏的支持库版本,则应将 getActionBar() 替换为 getSupportActionBar()。

if(getSupportActionBar() != null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复 getActionBar 方法可能产生 java.lang.NullPointerException 的相关文章

  • Android Studio 3.0.0 不允许 DOCTYPE

    升级到Android Studio 3 0 0 同步并更新gradle插件 出现以下错误 Error DOCTYPE not allowed if function http apache org xml features disallow
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 使用库来维护免费/付费的应用程序版本

    维护免费 付费应用程序版本的共识似乎是使用库 并从每个活动中设置一个标志 以从代码库中获取不同的功能 这有多安全 据我了解 一个人可以root他们的手机 获取APK 并且可以对其进行反编译 即使代码被混淆 也不难看出该应用程序是带有标志的包
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • 安卓无法玩ogg

    有人知道这是什么意思吗 ogg使用phonegap is Media播放 它使用MediaPlayer 05 26 15 41 50 007 1160 3631 E AudioFlinger no more track names avai
  • GridView 中多次调用 getView()

    我的 Activity 由包含 40 多个元素的 GridView 组成 开始活动后 用户最多可以看到 15 个项目 3 行 每行 5 个项目 我在 getView 正文中编写传递给获取 View 的 LogCat 编号 Log i get
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • Retrofit-2 内容类型问题

    我的 Api 接受 Content Type application json 作为标头 我按照改造文档中所述完美设置了标题 Headers Content Type application json POST user classes C
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • 如何使用 Firebase UI 在 recyclerView 中显示时从 Firebase 数据库中的子级引用父级

    我目前正在引用 quote text 子项 这些数据显示在recyclerview using firebase用户界面 我想获取 quote text 的父名称 如何获取 quote text 孩子的父母姓名 When user clic
  • 从 TextView 中显示的数字中删除小数点[重复]

    这个问题在这里已经有答案了 对于我的简单计算器 我将结果显示在TextView 但它总是显示小数 我怎样才能删除它们 这是我的代码 public class MainActivity extends Activity implements
  • 为什么Android应用程序在发布到市场后尺寸会增加?

    我最近在 Android 市场上发布了我的应用程序 显示应用程序大小为 5 4MB 而实际 apk 大小为 2 8MB 为什么显示多出2MB 我应该如何限制我的应用程序大小 请帮我 您的应用程序大小会增加 因为您使用了复制保护选项ON在发布
  • BottomSheetDialog get Behavour 始终返回 null

    我与底部表单对话框我必须获得行为才能设置setBottomSheetCallback 来处理一些事情 As 谷歌说 https android developers googleblog com 2016 02 android suppor
  • Android Studio IDE 上的“文本/设计”选项卡缺少新的 Android 项目

    如何在创建新项目期间自动创建的 Activity main xml 文件的 src main res layout 文件夹中启用文本 设计选项卡 如果我右键单击并在所述文件夹上创建 xml 文件 则设计 文本选项卡存在 有什么建议吗 谢谢
  • Android - 如何更改 TimePicker 中的文本颜色?

    我正在使用 TimePicker 到 LinearLayout 中 背景颜色 黑色 但是 我看不到 TimePicker 中的数字 并且我需要在布局中将背景颜色设置为黑色 如何更改 TimePicker 中的 textColor 我已经尝试
  • 在Android Studio中更改项目主题?

    我使用浅色主题创建了一些项目 现在我想将其更改为深色 但我不知道该怎么做 顺便说一句 我不是问如何在代码中做到这一点 只是问如何更改项目的默认主题 在 AndroidManifest xml 的 application 标签下 您可以设置您
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • FCM onMessageReceived 应用程序运行时返回空白消息和标题

    正如您在标题中所写 当应用程序关闭时 它运行良好 并且onMessageReceived获取消息正文和标题 但如果应用程序处于前台模式 运行模式 则可以发送通知 但没有消息和标题 请问该怎么办 代码 Override public void

随机推荐

  • 如何在flutter中解析json?

    我想创建一个新闻应用程序 并且我使用 newsapi org 作为来源 我正在尝试获取来自 Http 库的 JSON 数据 我在下面提供了完整的代码 它没有给我任何错误 但没有加载数据 当我打印数据时 它打印一切正常 但我无法显示它 我不知
  • 如何在 QML 中使用 Font Awesome

    有谁知道如何在 QML 中使用 Font Awesome 吗 我找不到任何文档或任何信息如何在 QML 中使用 Font Awesome 我喜欢做的是使用fontello http fontello com 创建最小的图标集 而不是从 Fo
  • 在 UIWebView 中更改用户代理

    我的业务需要能够为嵌入式 UIWebView 自定义 UserAgent 例如 如果用户使用应用程序的一个版本与另一个版本 我希望服务器做出不同的响应 是否可以像 Windows 应用程序中的嵌入式 IE 浏览器那样在现有 UIWebVie
  • 查找多模块 Maven Reactor 项目的根目录

    有没有一种简单的方法可以找到多模块 Maven 项目的根 例如 Gradle 的rootDir 背景 我想使用 maven dependency plugin 将多模块项目的所有子模块中的工件复制到相对于整个项目的根目录的目录 也就是说 我
  • 如何在 XAML 上设置 ResourceDictionary FontSize?

    如果这会是一件混乱的事情 我深表歉意 我对 Xamarin 还很陌生 目前我正在尝试将此资源字典代码转换为 XAML Current Resources new ResourceDictionary FontResources Defaul
  • 设计 EAP-TLS 客户端问候消息

    我正在尝试设计第一个启动 EAP TLS 握手的数据包 这是我的数据包目前的样子 我通过用相应的信息手动填充 C 中的缓冲区来设计 EAP 部分 我使用 OpenSSL 导出的 TLS 部分如图所示在这个问题中 https stackove
  • 如何在 MS Access 表单上动态保持控件居中(相对位置)?

    我正在使用 Access 2013 并且有许多控件 列表框 按钮等 当调整表单大小时 我希望它们作为一个组在表单上保持居中 锚定无法实现我正在寻找的目标 因为我不想将控件锁定到顶部 底部 左侧 右侧 我希望他们留在中心 只需使用这样的代码m
  • 在 C++ 中清除控制台

    我正在尝试清除 C 中的控制台 我知道打印多个换行符是一种不好的做法 因为它可能很慢 并且完全清除控制台窗口并不总是可靠的 但我研究了多种选项 除了发现几乎没有其他解决方案system cls 这是一个更糟糕的选择 本质上 我用过这条线co
  • 输入:页面加载时应用了无效的 css 规则

    在 Firefox 或 Chrome 中查看这两个 fiddle 在this http jsfiddle net hezgkxoh 2 一 我只有一个简单的表格required属性和一个submit按钮 当框为空时按 提交 会导致其样式为i
  • 参数化方法调用什么时候有用?

    Java 方法调用可以像下面的代码一样进行参数化 class Test
  • 典型的按键持续时间是多少

    我正在固件项目中做一些关于按键处理的工作 我一直在谷歌上搜索 试图找出按键的典型持续时间是多少 特别是快速打字员的最短持续时间 令人惊讶的是我在任何地方都找不到任何相关数据 最近有一些关于按键时序的研究已经发表 这里有两个 http www
  • 如何在 .NET 中可靠地获取图像尺寸而不加载图像?

    我知道如何获取图像的大小 x y Image FromFile cat jpg Size 但这需要从内存中加载图像 当我在 Windows 资源管理器中查看图像时 它会显示尺寸 我如何访问该大小 它对所有图像都可靠吗 Windows 资源管
  • 什么日历似乎是从 1800 年 12 月 28 日开始计算天数的?

    我的任务是从一些奇怪的旧系统中读取一些数据 该系统包含许多日期 但它们的格式都很奇怪 它们是整数 范围约为55 000 to 80 000 我确定有两个日期 58 112 equals February 5 1960 originally
  • 为什么我不能在 python 的 for 循环中重新分配变量? [复制]

    这个问题在这里已经有答案了 今天我发现一个有趣的事实 我无法在 for 循环 中重新分配变量 但为什么呢 这是我的代码 gt gt gt my list 1 2 3 4 5 gt gt gt for i in my list gt gt g
  • WCF - 如何在 JSON 中序列化和反序列化?

    我在 WCF 中编写了几个类 数据契约和服务契约 并且尝试在 JSON 中进行序列化和反序列化 如果我需要以下 JSON 结构 我将如何创建 DataContract s response locations location id 12
  • 在 JavaScript 中查找文本字符串

    我有一个很大的有效 JavaScript 文件 utf 8 我需要从中自动提取所有文本字符串 为简单起见 该文件不包含任何注释块 仅包含有效的 ES6 JavaScript 代码 一旦我发现发生 or 或 我应该扫描文本块的末尾 这是我陷入
  • TypeError:expect(...).to.startsWith 不是一个函数 - chai 和 chakram

    我开始编写一些自动化测试 API 现在我尝试对此端点执行以下操作 https dog ceo api breeds image random https dog ceo api breeds image random 所以我添加到我的函数中
  • Java (JGIT) Files.delete() 删除文件失败,但 file.delete() 成功

    我正在使用 jgit 版本4 8 0 201706111038 r 并添加一个关闭钩子以在终止后删除临时目录 但是 关闭挂钩无法从内部删除某些文件 git子目录 尽管按照 jgit 的要求关闭了 Git 对象 但有趣的是 只有当我使用 Pa
  • 多次运行 gradle 任务

    我有一个 gradle 项目 在子目录中包含两个模块 目录结构如下 root module1 build gradle module2 build gradle build gradle settings gradle 顶层settings
  • 如何修复 getActionBar 方法可能产生 java.lang.NullPointerException

    我在活动中使用工具栏作为操作栏 我正在尝试添加方法getActionBar setDisplayHomeAsUpEnabled true 到 Activity java 文件 用于旧设备的向上导航 该方法在 Android Studio 中