最近在看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. Hdu4280 Island Transport 2017-02-15 17:10 44人阅读 评论(0) 收藏

    Island Transport Problem Description In the vast waters far far away, there are many islands. People ...

  2. 9、Dockerfile语法

      在Dockerfile中定义了很多关键字,通过关键字来完成Dockerfile的编写.   Dockerfile官方文档 9.1 FROM   在Dockerfile中FROM主要是指定这个Doc ...

  3. [label][转载][web-design-psychology]网页设计心理

    原文出处: http://mux.alimama.com/posts/1301 Tip1:信息不要同时全部展示,阶段性地向用户展示当前场景里必要的信息 设计师经常犯的错误:同时将大量信息展示给用户.不 ...

  4. [Postgres]postgresql.conf : Permission denied处理一法

    使用yum安装完postgresql,没有使用默认的DATA地址,自己配置了DATA地址以后,使用root权限启动service service postgresql start ,报出了" ...

  5. solr-4.10.2版本使用tomcat7部署

    当前版本仅限于solr-4.10.2版本.默认环境使用的是jdk1.7,tomcat7.环境自己配置.网上一堆堆的. 1.下载相应的文件(solr-4.10.2.zip). 官网地址:http://l ...

  6. Jmeter+Ant生成结果报告时,MinTime、MaxTime显示NaN的问题

    将apache-jmeter-2.13\lib中的serializer-2.7.2.jar.xalan-2.7.2.jar复制到apache-ant-1.9.6\lib中即可: 复制前生成:

  7. BEAUTIFUL

    DESCRIPTION:一个长度为n 的序列,对于每个位置i 的数ai 都有一个优美值,其定义是:找到序列中最长的一段[l, r],满足l<i<r,且[l, r] 中位数为ai(我们比较序 ...

  8. case when then end 用法

    select type,numbers,case monthst when 1 then '一月'when 2 then '二月'when 3 then '三月'else '其他月'end month ...

  9. BootStrap框架引入文件

    bootstrap -- 框架 引入需要的  这是外网的------************************************************************* < ...

  10. jquery中通过添加readonly或者disabled属性实现行为禁止 / 去除某个属性的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...