Android又现空指针(java.lang.NullPointerException)

java.lang.NullPointerException出现的几种原因及解决方案 java.lang.NullPointerException(空指针异常)是Java开发中常见错误,多因对null对象执行操作所致。常见原因包括:调用null对象的方法或属性、将null作为数组访问、null参与自动拆箱、集合未初始化就操作等。 解决方案涵盖:调用前判空(如if语句、Objects.requireNonNull)、初始化对象与集合、使用Optional类规避风险、借助IDE调试定位null源头等。掌握其成因与解决办法,能有效提升代码健壮性,减少程序崩溃隐患,是Java开发者必备技能。 阅读详情
一直以来,空指针引用是程序员极力要避免的问题。在java程序中,当程序出现空指针引用时,通常会报java.lang.NullPointerException异常,
这样的异常通常会导致程序崩溃或系统挂掉。

下面是一个真实的案例:
平台: android
代码:frameworks/base/media/java/android/media/RingtoneManager.java中:

    public static Uri getActualDefaultRingtoneUri(Context context, int type) {
        String setting = getSettingForType(type);
        if (setting == null) return null;
        final String ringtonePath = Settings.System.getString(context.getContentResolver(), setting
                + "_path");
        Uri ringtoneUri = null;
        if (ringtonePath != null && !TextUtils.isEmpty(ringtonePath)) {
            ringtoneUri = getUriFromPath(context, ringtonePath);
            Log.i(TAG, " ringtoneUri = " + ringtoneUri.toString());   //出现空指针,why?
        }
        if (ringtoneUri == null){
            ringtoneUri = getUriFromPath(context, getDefaultPath(context, type));
        }
        return ringtoneUri;
    }

现象: 调用了这个函数的Settings应用异常终止。

分析:
1. 出现空指针的地方居然是调试用的“Log.i(TAG, " ringtoneUri = " + ringtoneUri.toString());” 。
由于ringtoneUri的值为null,所以出现如下异常:
08-15 20:43:52.429 E/AndroidRuntime( 2071): java.lang.NullPointerException

08-15 20:43:52.429 E/AndroidRuntime( 2071): at android.media.RingtoneManager.getActualDefaultRingtoneUri(RingtoneManager.java:719)


如果将“.toString()”去掉,则程序正常运行。


至于为什么“ringtoneUri的值为null”, 是由于getUriFromPath()决定的,这里,不讨论getUriFromPath,只告诉读者,“只有在某些环境下,getUriFromPath才返回null,通常,它是可以返回不为null的值"

结论:
1. Uri转换为String类型,该如何正确使用以及toString()的正确使用方法。

2. 切忌对有可能是null的对象进行任何形式的方法调用。


从日志到修复:实战定位安卓游戏空指针闪退 本文详细介绍了如何通过日志分析定位安卓游戏中的空指针闪退问题,并提供了从基础检查到高级调试的完整解决方案。文章重点分析了NullPointerException的常见原因,分享了防御性编程技巧和系统性防护策略,帮助开发者有效预防和修复游戏闪退问题。 阅读详情

相关推荐

在没有实验数据的情况下,如何高效快速发表高影响因子论文

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

glldxh的博客 371

Android Studio遇到的错误:java.lang.NullPointerException及解决方法

使用Android Studio,执行Textview.settext时遇到的误:java.lang.NullPointerException,空指针异常,如下:Caused by: java.lang.NullPointerException at imooc....

transformed的博客 1万+

实战指南:在UE5中高效集成Entt(ECS)框架

本文提供了一份在虚幻引擎5中高效集成Entt ECS框架的实战指南。针对UE5项目在处理大规模动态实体时的性能瓶颈,详细讲解了如何通过数据驱动的ECS架构进行优化。内容包括前期环境准备、核心构建步骤、创建首个ECS子系统以及与UE原生系统的数据同步技巧,旨在帮助开发者快速掌握集成方法,提升游戏逻辑的执行效率。

weixin_29002209的博客 158

出现Java.Lang.NullPointerException的错误的可能原因,以及一些解决方法(AndroidStudio 、java)

1.参考https://blog.csdn.net/weixin_37438128/article/details/90048763 2.参考https://blog.csdn.net/qq_42618969/article/details/81141895 我们在开发软件的时候,不知道你是否遇到过Java.Lang.NullPointerException的错误,出现这和错误呢,不是大的错误,但是找不到的话,分分钟钟让你崩溃,所谓空指针的错误,就是你定义了一个对象,也就是有了一个指针,但是你没有给它赋

幽香飞狐的博客 5531

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3193

Multisim电路仿真与实验:包含连续时间系统的模拟、周期信号频谱分析、组合逻辑电路:竞争冒险、数字锁

这些实际系统可以是电的或非电的物理量系统,也可以是经济、军事等非物理量系统。矩形周期信号的幅度和周期保持不变,随着占空比的增加(即脉宽加大),主峰高度越高,主峰宽度越窄,各谱线间隔越窄,主峰包含的谱线数量越少,有效频带宽度越窄,主峰内高次谐波分量越少。输入信号所经路径不同而引起的冒险现象,按短暂尖峰极性的不同,可将冒险分为“0-1-0”型险象(也称“1”型)和“1-0-1”型险象(也称“0”型)理想的正弦波的幅度谱包含1条谱线,证明其只有基频分量,而无谐波分量,如果能测出谐波分量,说明该正弦波已有失真。

Jumpingtigger_35的博客 1万+

Spinner中getResource()空指针问题以及Context传值问题

在封装一个Spinner的时候,传值报空指针异常: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference报错语句: time

RKGG爱吃鱼 4554

ISP之LSC(Lens Shading Correction)

LSC - Lens Shading Correction即镜头暗影校正。

IQ_WXY的博客 5097

关于class.getResource()报空指针问题

之前看很多视频,发现他们直接写 类名.class.getResource("某个文件名"); 就可以直接获取到URL,但是我有时候却会报空指针异常。 后边发现了一个解决方案: 那就是你直接将啥都不写的路径输出出来,再根据自己的需求在后边补充,问题就解决啦 System.out.println(类名.class.getResource("")); 比如说你输出的内容是: file:/D:/IDEA/Workspace/Private/out/production/GuiPractice/edu/jmu/l

Mats的博客 4027

【Unity】【2D】用连续图片生成动画Animation的简明步骤

本文介绍了Unity中使用2D连续图片制作2D动画Animation的简明步骤。

O青草O的博客 Unity和游戏制作知识分享 718

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(17-32)

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(17-32)

weixin_45735391的博客 12万+

CRASH问题:java.lang.NullPointerException

java.lang.NullPointerException 今天在家练习ListView的时候,遇到一个java.lang.NullPointerException的空指针异常,log如下: 2020-05-10 15:40:29.249 20436-20436/? E/k.myapplicatio: Unknown bits set in runtime_flags: 0x8000 2020-05-10 15:40:29.602 20436-20436/com.hpeak.myapplication E

HPeak的博客 3676

使用OpenGL加载和显示DXF格式的3D模型文件编程

这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。

2301_79331421的博客 412

Android开发中遇到Java.lang.NullPointerException解决办法

我们在开发软件的时候,不知道你是否遇到过Java.Lang.NullPointerException的错误,出现这和错误呢,不是大的错误,但是找不到的话,分分钟钟让你崩溃,所谓空指针的错误,就是你定义了一个对象,也就是有了一个指针,但是你没有给它赋值,然后嫩,你就直接引用了,那么这个时候就会报出空指针的错误。今天写程序的时候,遇到了一次空指针的错误,也是寻找好久,最终才发现空指针的出处。下面是我遇

Miracle.Zhao的博客 9629

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【零碎小bug系列】安卓开发是遇到空指针异常java.lang.NullPointerException: Attempt to invoke...

这里是引用 安卓开发是遇到空指针异常 java.lang.NullPointerException: Attempt to invoke virtual method ‘android.text.Editable android.widget.EditText.getText()’ on a null object reference 解决 有可能在如下三点 当在Activity里面使用se...

青城墨白的 1267

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

cocos2d-x3.2中在Eclipse中java.lang.NullPointerException的问题解决

错误1分析:java.lang.NullPointerException即空指针,没有赋值或者赋值错误导致了空指针引用。 看看有哪里没有初始化造成空指针。 总结:java.lang.NullPointerException引用空指针错误的解决办法是仔细检查代码,看是否有实例没有初始化就 进行了引用。 Eclipse的安卓开发调试环境中,不能指出是哪个变量未初始化,以及在源码...

菲菲家的吴先森 1712

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android :空指针Java.lang.NullPointerException

参考:安卓开发过程中空指针的问题Java.lang.NullPointerException 空指针概念: 1.所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。 2.所谓的空指针,就是指针的内容为空,比如上面的s,如果令它指向null,就是空指针。 3.所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法...

火星男孩的分享空间 2590

java.lang.NullPointerException: Attempt to invoke virtual method.....

java.lang.NullPointerException: Attempt to invoke virtual method...这是很多人常出现的异常报错,这篇文章将详细讲解各种情况以及如何找出出错的位置方便我们快速解决

weixin_52263647的博客 5万+

记录一次空指针异常的解决(java.lang.NullPointerException:Attempt to invoke virtual method)

java.lang.NullPointerException:Attempt to invoke virtual method ’ xxxxxx’ on a null object reference 根据AS的提示定位到student.getName()方法上 先尝试使用Log.e()输出student对象 控制台打印出 -> null 最后发现获取student对象失败了 public static Student getLoginer() { if (BmobUser.isL

weixin_44287846的博客 2896

安卓开发时提示:java.lang.NullPointerException空指针异常

肯定有很多人在开发安卓时遇到这样的问题: 这是提示空指针异常且是LoginActivity中的Edittext.setText的null错误,解决方法: 第一,看看你是否没有声明就直接使用setText方法,例:initview(){metPwd=findViewById_(R.id.etLogin_pwd);} 第二,看看你的initView()是不是放在最前面,因为程序执行是

棒棒糖的专栏 1620

Android 常见的java.lang.NullPointerException

java.lang.NullPointerException 解决方案 该异常表示尝试去调用virtual method,使用了一个空对象引用,建议您检查引用的对象是否为空。 [解决方案]:这种异常通常是调用一个对象的方法抛出的,凡是调用一个对象的方法之前,一定要进行判空或者进行try-catch,这样基本可以规避大部分空指针异常。 Attempt to invoke virtual method ‘void android.view.View.setTranslationZ(float)’ on a nu

qq_43603312的博客 2414

导致java.lang.NullPointerException异常的一种情况

先来看错误提示: 模拟器上的错误提示 LogCat窗口提示: 通过查android开发者帮助文档(http://developer.android.com/reference/java/lang/NullPointerException.html)我们知道,“java.lang.NullPointerException”异常是在程序尝试访问一个对象的字段/方法或者一个数组(A

heiantianshi1的专栏 2416

Android中关于空指针异常的解决办法

笔者在开发安卓的过程中经常遇到空指针异常的情况:java.lang.NullPointerException 举个例子: public void onClick(View v) { // TODO 自动生成的方法存根 switch (v.getId()) { case R.id.button1: if (!isBind) { ...

两只橙的博客 6058

android java.lang.nullpointerexception,Android Studio遇到的錯誤:java.lang.NullPointerException及解決方法...

使用Android Studio,執行Textview.settext時遇到的誤:java.lang.NullPointerException,空指針異常,如下:Caused by: java.lang.NullPointerExceptionat imooc.com.topbar.TopbarLayout.setToptext(TopbarLayout.java:68)at imooc.com....

weixin_39622891的博客 1145
上一篇: Android音量调节的实现(RingtoneManager和RingerVolumePreference)
下一篇: Android基础#18:Android中声音文件与数据库表的对应关系,数据库的查询,sqlite
liranke
博客等级 码龄20年 4939粉丝 594原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值