最近在看android actionBar的使用,环境为AndroidStudio,建一个简单的工程,功能为:两个按钮,一个单击用于显示actionbar,一个用于隐藏actionbar。默认actiobar显示。理想状况如下图所示:

  建好工程并运行,发现actionbar默认不显示(不显示上图所示的hello部分),如下图所示:

  且单击“显示actionBar”的按钮后出现异常:如下图所示:

  发现,是java.lang.NullPointerException引起的,到代码里面发现代码 actionBar = getActionBar();获取失败,结果为null。为了解决该问题,在网上搜索了一下,发现有人总结的挺好,我是根据其第二条解决的。这里将地址和内容直接复制过来,作为收藏。地址是:http://blog.csdn.net/zhufuing/article/details/47105965。内容如下:

前言

  在使用 ActionBar的时候,有时候会爆出空指针异常,这是因为应用没有获取到 ActionBar 导致的,而导致应用没有获取到 ActionBar 的原因比较多,所以我们下面就来总结一下 ActionBar 获取不到的错误原因。

解决办法

  1. 检查你的应用是否设置了没有 ActionBar 的主题Theme,或者直接设置了 NoActionBar或NoTitleBar 属性,主要要检查这几点:检查 AndroidManifest.xml 中的 标签中的theme属性,然后检查各个 Activity 标签中是否有不同的 Theme 导致这个界面的 ActionBar 无法显示,@android:style/Theme.NoTitleBar<item name="windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item>
    这样的属性都会使应用中的 ActionBar消失,切记,如果你要使用ActionBar,则一定要清除掉这些Theme属性设置,如果你的项目中 res 目录下除了 values 目录外,还有其他的res/values-v11,style/values-v14等,则这些目录中的 styles.xml 都需要检查一下,最后再检查下 Activity 代码中是否动态设置了全屏或者不显示TitleBar,代码如下: 
    //requestWindowFeature(Window.FEATURE_NO_TITLE); 
    //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    上面的两句代码,上面一句设置Activity不显示TitleBar, 下一句则设置Activity为全屏模式,这两句代码都会导致 ActionBar 
    无法显示,从而使 getActionBar()获取失败,如果你的项目中的 Activity 有父一级别的 Activity,则也需要将父一级别的Activity中的NoTitle和全屏代码注释掉;
  2. 如果你不确定你的应用所用的主题 Theme 是否支持 ActionBar,可以在 res/values.xml 文件中设置为Theme.AppCompat,这是 AppCompat 中的Theme主题,可以保证低版本Android上也可以使用 ActionBar(注意:res/values,res/values-v11,res/values-v14等目录中的style都要进行style设置,并且都要注意:不要设置成第1条中会禁止ActionBar显示的主题,但可以设置为不同种类的主题),另外,在 Acticity 中获取 ActionBar 的时候(getActionBar()或getSupportBar()), 需要在 setContentView(R.layout.main)之后调用;
  3. 如果你的项目使用的是 android.app.ActionBar,则需要把你应用的最低支持版本改为11(Android 3.0),使用 getActionBar() 来获取ActionBar,如果你的项目要支持Android 3.0以下,则你的项目需要引入最新的 AppCompat 兼容包,然后将 ActionBar引用改为android.support.v7.app.ActionBar,并使用 getSupportActionBar 来获取 ActionBar;
  4. 除了以上的原因可能导致 ActionBar 获取为空的话,还有其他的原因导致 getActionBar() 获取失败,例如我在网上查找的时候,有人的项目是在Android SDK 2.2上新建的,当他使用 ActionBar 的时候将 AndroidManifest.xml 中的 minSdkVersion设置为11后(),发现 getActionBar() 获取失败是因为项目中没有 res/values-v11和res/values-v14和其中的style.xml文件,我最近遇到的 getActionBar() 为null是在 Eclipse 中导入了一个别人发给我的项目,但是在他的电脑上编译运行的apk getActionBar(), 但在我的电脑上则不行,试了上面的几种方法也不行,最后,我把这个项目导入到了 Android Studio 中,终于可以正常运行了。

如果大家有其他的有关 getActionBar() 为null的问题,方法和经验,欢迎讨论交流。

参考链接

http://vcsos.com/Article/pageSource/150125/20150125093506.shtml 
http://stackoverflow.com/questions/27959107/getting-the-null-pointer-exception-in-the-getactionbar-method/27960390 
http://www.apkbus.com/android-130755-1-1.html 
http://www.cnblogs.com/shortboy/archive/2013/04/18/3029029.html 
http://stackoverflow.com/questions/6867076/getactionbar-returns-null 
http://blog.csdn.net/yueqinglkong/article/details/39577749 
http://stackoverflow.com/questions/8499181/actionbar-throws-nullpointerexception 
http://stackoverflow.com/questions/28255552/nullpointerexception-caused-by-getactionbar

getActionBar()为null的解决方法总结(引用他人)的更多相关文章

  1. 【Android】getActionBar()为null的解决方法总结

    前言 在使用 ActionBar的时候,有时候会爆出空指针异常,这是由于应用没有获取到 ActionBar 导致的,而导致应用没有获取到 ActionBar 的原因比較多.所以我们以下就来总结一下 A ...

  2. 【java】Execption的 e.getMessage()为null的解决方法

    ================================ 场景: 当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查.而通过的Exception.getMess ...

  3. Type.GetType()在跨程序集反射时返回null的解决方法

    在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型.如果使用稍有不慎,就会产生运行时错误.例如使用Type.GetType("BNameSpace.Class ...

  4. .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)

    最近在项目中与别的公司对接业务,对方是Java语言,需要调用对方的WebServices,结果常规的添加web引用的方法可以传过去值,但是返回值为null 查了很多资料,没有解决方法 思考应该是.Ne ...

  5. PHP json_decode 函数解析 json 结果为 NULL 的解决方法

    在做网站 CMS 模块时,对于模块内容 content 字段,保存的是 json 格式的字符串,所以在后台进行模块内容的编辑操作 ( 取出保存的数据 ) 时,需要用到 json_decode() 函数 ...

  6. 使用Ef查询出现的问题The cast to value type 'System.Boolean' failed because the materialized value is null.的解决方法

    把值类型的系统.布尔的失败是因为物化值是null.结果类型的泛型参数或查询必须使用可空类型. 解决方法: 请确保你查询中的字段值不为空或者做为空判断

  7. 浏览器url传参中文时得到null的解决方法

    在写一个中文参数需求的时候遇到了以下问题,经过半天的测试和各种编码,以及网上一些有用没用的资料尝试终于解决    比如下面的url地址:http://travel.widget.baike.com:8 ...

  8. JPA-save()方法会将字段更新为null的解决方法

    今天在开发上碰到一个问题,在做页面展示的时候传给前端十个字段,前端修改了其中3个的值,所以只传了3个值给后端,其余字段默认为null,更新后其他7个字段在全部变为了空值. 在前端没法全量回传所有属性的 ...

  9. Maven项目-端口被占用java.net.BindException: Address already in use: JVM_Bind <null>:8080解决方法

    异常显示: 问题所在:之前启动的tomcat未停止,端口被占用. 解决方法: 养成良好的习惯,用完之后停掉服务.

随机推荐

  1. linux每天一小步---mkdir命令详解

    1 命令功能 mkdir命令用于创建单个目录或者多级目录,但前提在于用户对于当前目录有写权限. 2 命令语法 mkdir  [选项]  [目录名] 3 命令参数 -m 在创建目录的同时设定目录权限(而 ...

  2. (二分搜索 数论)(求阶乘里零个数对应的阶乘)light oj -- 1138

    链接 Description You task is to find minimal natural number N, so that N! contains exactly Q zeroes on ...

  3. 解决阿里云OSS跨域问题

    解决阿里云OSS跨域问题 现象 本人项目中对阿里云图片请求进行了两次,第一次通过img标签进行,第二次通过异步加载获取.第一次请求到图片,浏览器会进行缓存,随后再进行异步请求,保存跨域失效. 错误信息 ...

  4. [label][Apache] VirtualHost

    <VirtualHost *:80>    ServerName   localhost    DocumentRoot "D:\www"</VirtualHos ...

  5. 详解CSS float属性

    CSS中的float属性是一个频繁用到的属性,对于初学者来说,如果没有理解好浮动的意义和表现出来的特性,在使用的使用很容易陷入困惑,云里雾里,搞不清楚状态.本文将从最基本的知识开始说起,谈谈关于浮动的 ...

  6. TypeScript白鹭引擎Egret防止按钮事件冒泡穿透

    this.addEventListener(egret.TouchEvent.TOUCH_BEGIN, (event) => { if (event.target!=this) return;/ ...

  7. windows下简单验证码识别——完美验证码识别系统

    此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...

  8. Gogland使用 - 非常简单查看Go语言源代码全貌!

    Go语言也支持面向对象开发,不过和以往我们所使用的面向对象开发还是有不同,Go语言主张组合方式形成类的概念,在Go语言中,结构起到很大作用,如果用结构组合字段和方法,那么单纯在源代码中看,真的是费时费 ...

  9. JZOJ6096 森林

    题目传送门 Description ​我们定义对一棵树做一次变换的含义为:当以 1 号节点为根时,交换两个互相不为祖先的点的子树: ​一棵树的权值为对它进行至多一次变换能得到的最大直径长度: ​初始时 ...

  10. 【SSH学习笔记】用Struts2实现简单的用户登录

    准备阶段 在使用学习Struts2的时候首先要下载相应的架包 Struts2资源下载 这里建议下载第一个,在struts-2.5.14.1-all.zip里有很多实用的东西,不仅有架包还有官方为开发者 ...