空指针异常-今天练习时遇到的问题
今天写APP时遇到了一个问题,卡了我好一会,最终找出来解决方法。
首先是报错:NullPointerException
这显然是空指针异常问题,什么是空指针异常呢
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:
-
调用 null 对象的实例方法。
-
访问或修改 null 对象的字段。
-
将 null 作为一个数组,获得其长度。
-
将 null 作为一个数组,访问或修改其时间片。
-
将 null 作为 Throwable 值抛出。
我一开始百思不得其解,一开始以为是由于我对Recyclerview不熟悉,导致哪里出现了问题,
后来逐一排查,发现似乎是数据库的问题,这个问题是连接数据库后出现的。
但是最终还是发现数据库并没有地方写错。这又是为什么呢?
空指针异常无非是调用了null,数据库没有写错,但是却有可能调用数据库中空的内容,确定这个可能性最大。
最终我发现,确实是这样。
首先看一下我数据库函数怎么写的
public Clock getClockByKeyWord(int key){ SQLiteDatabase db = dbHelper.getReadableDatabase(); String selectQuery = "SELECT * FROM " + Clock.TABLE + " WHERE " + Clock.KEYWORD +"=?"; Clock clock = new Clock(); Cursor cursor = db.rawQuery(selectQuery,new String[]{String.valueOf(key)}); if (cursor.moveToFirst()){ clock.date = cursor.getString(cursor.getColumnIndex(Clock.DATE)); clock.word = cursor.getString(cursor.getColumnIndex(Clock.WORD)); clock.summary = cursor.getString(cursor.getColumnIndex(Clock.SUMMARY)); clock.maxday = cursor.getString(cursor.getColumnIndex(Clock.MAXDAY)); clock.keep = cursor.getString(cursor.getColumnIndex(Clock.KEEP)); return clock; } cursor.close(); return null; }
这里,我通过自增的键值获取数据,如果获取不到,返回null,获取到则返回数据库的数据
然后看我调用数据库,我一开始是这样写的
private void initData() { mData = new ArrayList<>(); CRUD crud = new CRUD(this); //导入数据 for (int i = 0; i < crud.getCountClock(); i++) { Clock data = new Clock(); Clock Data=crud.getClockByKeyWord(i); data.date= "日期:"+Data.date; data.word= "关键字:"+Data.word; data.summary= "总结:"+Data.summary; data.keep= "坚持天数:"+Data.keep; mData.add(data); } //设置布局管理器 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); mList.setLayoutManager(linearLayoutManager); //创建适配器 ListViewAdapter adapter = new ListViewAdapter(mData); //设置到rview里 mList.setAdapter(adapter); }
可以看到用了一个for循环,i从零开始增加。
问题就出在了这里,我的数据库中的自增键值是从1开始的,这里从i=0开始,最终导致返回了null!!最终程序崩溃,报空指针异常
这个小细节让我付出了很多时间找这个bug,当然,也让我吃了个教训,毕竟吃一堑长一智
作者:冰稀饭Aurora
出处:https://www.cnblogs.com/rsy-bxf150/p/17196729.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具