尝试插入 SQLite 时出现 NullPointerException - Android

2023-12-06

关注 Android 标签的人可能对我很熟悉。我在为我的高分实现 SQLite 数据库方面经历了最困难的时期。这也是我第一次使用 SQLite。

我试图插入两个变量——int 和long。我的insert()方法无法正常工作。除上述内容之外的任何建议也将受到赞赏。

预先感谢您的帮助。

高分.java

public class Highscores extends Activity {

    DatabaseHelper dh;
    SQLiteDatabase db;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.highscoresmain);

        dh = new DatabaseHelper(this);
        dh.openDB(db);
        long x = 11;
        int y = 22;

        TextView rank = (TextView)findViewById(R.id.rank);
        TextView percentage = (TextView)findViewById(R.id.percentage);
        TextView score = (TextView)findViewById(R.id.score);

        TextView r1r = (TextView)findViewById(R.id.r1r);
        TextView r1p = (TextView)findViewById(R.id.r1p);
        TextView r1s = (TextView)findViewById(R.id.r1s);

        dh.insert(x, y, db);  //Line 55
        scores = dh.getScore(db);
        percentages = dh.getPercentage(db);

        rank.setText("Rank Column - TEST");
        percentage.setText("Percentage Column - TEST ");
        score.setText("Score Column - Test");
        r1r.setText("test..rank");
        r1p.setText("" + percentages);
        r1s.setText("test..score");

        table = (TableLayout)findViewById(R.id.tableLayout);

        dh.closeDB(db);
    }
}

数据库助手.java

public class DatabaseHelper extends SQLiteOpenHelper { 

    SQLiteDatabase db;

    // Table columns names. 
    private static final String RANK = "_id"; 
    private static final String SCORE = "score"; 
    private static final String PERCENTAGE = "percentage";

    public DatabaseHelper(Context context) { 
        super(context, DB_NAME, null, DATABASE_VERSION); 
    }

    public SQLiteDatabase openDB(SQLiteDatabase db) {
        db = this.getWritableDatabase();
        return db;
    }

    public int getPercentage(SQLiteDatabase db) {
        //Cursor c = db.rawQuery("SELECT " + PERCENTAGE + " FROM " + TABLE + " WHERE " + PERCENTAGE + " = " + 22 + ";", null);
        Cursor c = db.rawQuery("SELECT " + PERCENTAGE + " FROM " + TABLE + ";", null);
        int i = 0;
        if(c.getCount() == 0) {
            i = 333;
        } else if (c.getCount() == 1) {
            i = 444;
        } else {
            i = 888;
               /*c.moveToFirst();
               int columnIndex = c.getInt(c.getColumnIndex("PERCENTAGE"));
               if(columnIndex != -1) {
                   i = c.getInt(columnIndex);
               } else { 
                   i = 999; 
               }*/
        }
        c.close();
        return i;
   }

    //Insert new record.
    public long insert(long score, int percentage, SQLiteDatabase db) {
        ContentValues values = new ContentValues();
        values.put(SCORE, score);
        values.put(PERCENTAGE, percentage);

        return db.insert(TABLE, null, values);  //Line 120
    }

    public synchronized void closeDB(SQLiteDatabase db) {
        if(db != null) {
            db.close();
        }
        super.close();
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE + " ("
                + RANK + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + SCORE + " LONG,"
                + PERCENTAGE + " INTEGER"
                + ");");
}

LogCat 输出

01-03 17:09:18.232: E/AndroidRuntime(1712): FATAL EXCEPTION: main
01-03 17:09:18.232: E/AndroidRuntime(1712): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.Highscores}: java.lang.NullPointerException
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.os.Looper.loop(Looper.java:137)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.ActivityThread.main(ActivityThread.java:5039)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at java.lang.reflect.Method.invokeNative(Native Method)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at java.lang.reflect.Method.invoke(Method.java:511)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at dalvik.system.NativeStart.main(Native Method)
01-03 17:09:18.232: E/AndroidRuntime(1712): Caused by: java.lang.NullPointerException
01-03 17:09:18.232: E/AndroidRuntime(1712):     at com.example.test.DatabaseHelper.insert(DatabaseHelper.java:120)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at com.example.test.Highscores.onCreate(Highscores.java:55)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.Activity.performCreate(Activity.java:5104)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-03 17:09:18.232: E/AndroidRuntime(1712):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-03 17:09:18.232: E/AndroidRuntime(1712):     ... 11 more

在这一行中,您打开数据库:

dh.openDB(db);

这将数据库的成员变量存储在DatabaseHelper.db(但在其他地方,尤其是在Highscores.db)。然后,您调用:

dh.insert(x, y, db);

Using a null db对象来自Highscores。最后,在insert(),你用这个null db object:

return db.insert(TABLE, null, values);

你应该做的是使用以下内容作为你的insert() method:

public long insert(long score, int percentage) { // Remove db parameter
    ContentValues values = new ContentValues();
    values.put(SCORE, score);
    values.put(PERCENTAGE, percentage);

    return db.insert(TABLE, null, values); // This will use the member variable
}

然后,致电dh.insert(x, y);反而。

你也应该改变openDB(SQLiteDatabase db) to openDB()以便它写入正确的数据库;就目前而言,它只是覆盖局部变量的值(一旦函数的作用域完成,它就不会改变任何东西)。

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

尝试插入 SQLite 时出现 NullPointerException - Android 的相关文章

  • 在 gridLayout 中从右向左放置项目

    我有一个GridLayout在我的其中一个布局中 我想从右到左放置项目 这意味着我希望将单元格 1 1 放在布局的右上角 我已经测试了这些代码GridView so far 1 android gravity right and andro
  • 在 Spring 5 Webflux 中启用 CORS?

    如何启用CORS在 Spring 5 Webflux 项目中 我找不到任何合适的文档 我使用这个自定义过滤器取得了成功 import org springframework context annotation Bean import or
  • SQLite 列错误:表 XXX 没有名为 YYY 的列

    我查看了以下内容 但没有发现任何与我的问题相符的内容 据我所知 android database sqlite SQLiteException 表 X 没有名为 Y 的列 编译时 INSERT INTO https stackoverflo
  • Hibernate EnumType 实例化异常

    我正在使用 hibernate 4 和基于 xml 的映射 这是我遇到的异常 Caused by org hibernate MappingException Unable to instantiate custom type org hi
  • 尽管 CRC 错误,仍强制 gzip 解压缩

    我认为有办法做到这一点 但我不确定如何做 基本上 我正在编写一个压缩程序 当我尝试解压缩压缩数据时 该程序导致了 crc 错误 通常 这意味着解压缩器实际上将我的数据识别为正确的格式并将其解压缩 但是当它将结果与 CRC 指示的预期长度进行
  • Jsoup遍历DOM树时节点哈希码冲突

    我正在使用 java jsoup 构建 HTML DOM 树 其中Node hashCode 用来 但我发现在遍历DOM树时存在很多哈希码冲突 使用以下代码 doc traverse new NodeVisitor Override pub
  • FacebookCallback#onCancel() 在 Android 的 Facebook Sdk 4.2.0 中登录一次后调用

    我已经在 Android 应用程序中成功实现了 Facebook 登录 但现在 令人惊讶的是 当我使用 facebook 登录时 如果我尝试使用 facebook 库 4 2 0 登录 facebook 它的 onCancel 方法就会被调
  • getView() 和 getActivity() 有什么区别?

    有什么区别getView and getActivity 我已经使用了这两种方法 但不明白基本的区别 即使使用方法在android中也是相同的 ListView deliverItemList ListView getView findVi
  • 如何在Android(模拟器)中查找并清除SQLite db文件

    我刚刚启动并运行了我的第一个 SQLite 数据库 但是为了重现它 我想要一种快速的方法来清除 db 文件 这样我就可以调用我的openOrCreateDatabase再次方法 第一个问题 我在网上看到的 data data PKG dat
  • Android 应用程序不在主屏幕上创建快捷方式图标(从 Play 商店下载)

    从Play商店下载应用程序后 它不会在主屏幕上创建快捷方式图标 它在应用程序抽屉中创建图标 虽然这个东西在大多数设备上运行良好 但对于某些设备 应用程序未创建快捷方式 我检查过 a Play 商店设置和自动添加小部件已标记 b 启动器设置自
  • 尝试让 GUI 使用 arrayList 在牌组中打印随机卡

    所以我目前正在用java开发一个卡牌战争游戏 我试图让 GUI 屏幕使用 arrayList 从一组卡片图像中打印 2 张随机卡片 必须使用它进行分配 卡片图像文件名为 1 png 2 png 52 png 并存储在 image card
  • Tomcat 连接池与准备好的语句缓存

    从 DBCP 连接池升级到 Tomcat 自己的实现 基于优秀的比较here http tomcat apache org tomcat 7 0 doc jdbc pool html Introduction 我有点困惑为什么他们放弃了这两
  • 为什么以下带有循环泛型的代码无法编译?

    以下是我的代码 class A
  • Android 从相机预览中解码位图

    我正在尝试从相机预览中获取位图图像 我将在执行面部检测后对其进行一些处理并绘制一些叠加层 环顾四周后 我发现 onPreviewFrame 获取的字节数组无法直接解码为位图 需要使用 YuvImage 将其转换为正确的像素格式 而这正是我所
  • 如何在java中定期刷新ZipOutputStream

    我正在尝试以 zip 格式存档文件列表 然后即时为用户下载 我在下载 1GB 大小的 zip 时遇到内存不足问题 请帮助我如何在不增加 jvm 堆大小的情况下解决此问题 我想定期冲洗流 我正在尝试定期冲洗 但这对我不起作用 请在下面找到我的
  • 如何将 java.util.Optional 与 REST API 一起使用?

    我有一堂课看起来像 public class ActiveDirectorySetup implements Serializable private ActiveDirectoryDataSource activeDirectoryDat
  • 在 Java 中从字符串中提取第一个单词的最佳方法是什么?

    尝试编写一个简短的方法 以便我可以解析字符串并提取第一个单词 我一直在寻找最好的方法来做到这一点 我想我会用str split 但是我想从字符串中获取第一个单词 并将其保存在一个变量中 然后将其余的标记放入另一个变量中 有没有一种简洁的方法
  • 2010 年的 java 并发修改异常灾难

    绘制一些存储在 ArrayList 中的粒子 这段代码工作正常 super paintComponent g for Particle b particleArr g setColor b getColor g fillOval b get
  • ConcurrentLinkedDeque 与 LinkedBlockingDeque

    我需要一个线程安全的 LIFO 结构 并发现我可以使用线程安全的实现Deque为了这 Java 7 引入了ConcurrentLinkedDeque http docs oracle com javase 7 docs api java u
  • 带有 wsdl2java 插件的 gradle

    我正在使用 no nils wsdl2java 插件 完整的 gradle build 文件如下所示 plugins id org springframework boot version 2 3 4 RELEASE id io sprin

随机推荐

  • 在 Windows 主机上调试 VMWare 中的 Linux 内核

    我正在开发我的第一个内核模块 所以我对此有点陌生 我的模块偶尔会产生恐慌 并且我无法使用 printk 深入了解它 据我所知 我的调试选项是 1 找到生成的OOPS消息并使用ksymoops or 2 尝试使用 kgdb 进行远程调试 我正
  • JOptionPane 每行有多个按钮?

    我将如何展示JOptionPane showinputDialog 与多个JButtons每行 我不是在谈论Yes No Cancel按钮但有多个自定义标签JButtons显示在内容区域JOptionPane showinputDialog
  • UWP:如何获取任务栏高度

    我正在制作一个 UWP 应用程序 我的要求是以编程方式获取任务栏的大小 该应用程序将在不同分辨率的平板电脑上运行 在遵循 stackoverflow 上的许多答案 实际上与隐藏 显示任务栏更相关 之后 我得到了这个 如何获取任务栏的位置和大
  • unordered_map::iterator 从哪里来?

    当我使用std unordered map
  • 获取保存在挂钩函数中的订单项元中的自定义字段值

    我可以在产品页面上添加 验证 显示在购物车和结帐页面上的自定义字段 请有人告诉我如何使用以下命令检索自定义字段值woocommerce order status completed 已完成 hook 我想在确认电子邮件发送给用户后再发送一封
  • 使用 Weblogic 10.3 记录 JPA SQL

    通过查看 Open JPA 网站 我发现我可以使用以下命令记录生成的 SQL
  • 什么是“Microsoft C++ 异常”?

    这主要是出于好奇 但在调试时 我经常看到这样的一行 MyApp exe 中 0x7583812f 处的第一次机会异常 Microsoft C 异常 内存位置 0x039be09c 处的 CTBadSupportFileException 我
  • 将包含毫秒的 CIM_DateTime 解析为 Java 日期

    我正在尝试将从 Windows 管理界面检索到的 DateTime 值转换为 Java 1 7 日期 最终到纪元以来的毫秒数 这格式在这里指定 我试图解析的一个例子是20160513072950 782000 420这是 2016 年 5
  • WPF实时渲染

    我正在设计一款游戏 并考虑使用 WPF 制作基本游戏玩法的简单原型 是否可以在 WPF 中实时渲染基本的 2d 图形 我所说的基本图形是指简单的形状 如直线 圆形等 我所说的 实时 是指根据速度 加速度等参数进行渲染 这些参数根据玩家输入而
  • zip 函数还需要第二个列表,它如何仅使用一个参数列表

    我开始学习 Haskell 并发现了一个很好的练习 如下 grouping Int gt Student gt Team Student grouping teamNumber zip ys where 所以 练习要我尽量把剩下的填满 该函
  • 友好网址中西里尔字符的问题

    事情是这样的 我有友好的网址 例如 http site com blog read http site com blog read green apple 最后一段实际上是博客文章的友好标题 问题是当我尝试将该段传递到数据库时 西里尔字体变
  • 获取 JEditorPane 中的可见文本

    我在 JScrollPane 中有一个 JeditorPane 在应用程序中的某些点 我想检索滚动窗格中可见的文本 当前显示的文本 并且仅检索此文本 有没有办法做到这一点 谢谢你 Elliott 您可以使用视口来获取视图位置和大小 JVie
  • 我可以从 MySQL sql 文件生成 ruby​​ on Rails 数据库迁移文件吗

    我有一个 sql 脚本文件 导入后会在 MySQL 数据库中创建一个表并用 2800 条记录填充它 这些是比利时国家的所有邮政编码 现在我想由此制作一个 Ruby on Rails 数据库迁移文件 知道我该怎么做吗 也许有办法解决 告诉数据
  • 在 SQL 中获取 iso 周和年的日期

    从iso周和一年开始 我想得到一个约会 该日期应该是一周的第一天 一周的第一天是星期一 例如 iso 第 10 周和 iso 年应转换为 2019 03 04 我正在使用雪花 执行此操作的日期表达式有点复杂 但并非不可能 SELECT DA
  • Beautiful Soup:从

    我正试图从中剔除过生日的人维基百科页面 这是现有的代码 hdr User Agent Mozilla 5 0 site http en wikipedia org wiki january 1 req urllib2 Request sit
  • 使用 nodejs app.get 或 http-server 的“主线程上的同步 XMLHttpRequest 已被弃用”

    我正在 AngularJS 中为 Node js 中的后端创建一个前端 我可以选择使用两个简单的 Node js 前端服务器来为前端网页提供服务 一个是 Express 中的简单 app get 另一个是使用 http server 包 无
  • 为什么我需要一个函数式接口来使用 lambda?

    我认为这个问题已经存在于某处 但我无法找到它 我不明白为什么需要一个函数式接口来使用 lambda 考虑以下示例 public class Test public static void main String args TestInter
  • 在 R 中使用 geom_boxplot() + geom_jitter() 时如何排除异常值

    我有一个名为 mpg 的数据集 我有兴趣绘制箱线图 上面有点 来查看变量 drv 传动系统类型 和 cty 每加仑城市英里 之间的关系 下面是我的代码 ggplot data mpg mapping aes x drv y cty geom
  • 服务帐户中的 Exchange 模拟:无法找到自动发现服务

    通过 ews 发送简单的电子邮件正在按预期工作 从我的帐户到我的帐户 ExchangeService ews new ExchangeService ExchangeVersion Exchange2010 ews Autodiscover
  • 尝试插入 SQLite 时出现 NullPointerException - Android

    关注 Android 标签的人可能对我很熟悉 我在为我的高分实现 SQLite 数据库方面经历了最困难的时期 这也是我第一次使用 SQLite 我试图插入两个变量 int 和long 我的insert 方法无法正常工作 除上述内容之外的任何