java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法以选择 sqlite

2023-12-12

我是安卓世界的新手。我的编码有问题。这只是一个小错误,我不知道它不起作用,即使我改变了其他方法,但错误仍然是相同的错误。这里的错误发生在logcat:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor com.example.zellon.surveyapps.DatabaseHelper.getAData()' on a null object reference

我只想选择数据库中的数据来获取 id,但不能因为上面的错误。

我将给出一个代码,用于从数据库中选择数据

调查指令.java

package com.example.zellon.surveyapps;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class surveyinstruction extends AppCompatActivity {
DatabaseHelper myDb;

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.surveyinstruction);

    TextView user = (TextView) findViewById(R.id.user);

    Intent in = getIntent();

    String nameUser = in.getStringExtra("nameUser");
    String tarikhUser = in.getStringExtra("tarikhUser");

    user.setText("Selamat Datang " + nameUser);

    Button btnSeterusnya = (Button) findViewById(R.id.btnTerus);

    btnSeterusnya.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intentTerus = new Intent(getApplicationContext(), surveymain.class);
            Cursor res = myDb.getAData();
            intentTerus.putExtra("id", res.getString(0));
            Log.e("ID ", res.getString(0));
            startActivity(intentTerus);
        }
    });
}
}

这是数据库处理程序

数据库助手.java

package com.example.zellon.surveyapps;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "survey.db";
public static final String TABLE_USER = "user";
public static final String COL_USER_1 = "ID";
public static final String COL_USER_2 = "NAMA";
public static final String COL_USER_3 = "TARIKH";
public static final String COL_USER_4 = "MARKAH";

public static final String TABLE_QUESTION = "question";

public static final String COL_QUES_1 = "ID";
public static final String COL_QUES_2 = "IDUSER";
public static final String COL_QUES_3 = "K1";
public static final String COL_QUES_4 = "K2";
public static final String COL_QUES_5 = "K3";
public static final String COL_QUES_6 = "K4";
public static final String COL_QUES_7 = "K5";
public static final String COL_QUES_8 = "A1";
public static final String COL_QUES_9 = "A2";
public static final String COL_QUES_10 = "A3";
public static final String COL_QUES_11 = "A4";
public static final String COL_QUES_12 = "A5";
public static final String COL_QUES_13 = "V1";
public static final String COL_QUES_14 = "V2";
public static final String COL_QUES_15 = "V3";
public static final String COL_QUES_16 = "V4";
public static final String COL_QUES_17 = "V5";
public static final String COL_QUES_18 = "D1";
public static final String COL_QUES_19 = "D2";
public static final String COL_QUES_20 = "D3";
public static final String COL_QUES_21 = "D4";
public static final String COL_QUES_22 = "D5";
public static final String COL_QUES_23 = "TOTK";
public static final String COL_QUES_24 = "TOTA";
public static final String COL_QUES_25 = "TOTV";
public static final String COL_QUES_26 = "TOTD";

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_USER + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAMA TEXT, TARIKH TEXT, MARKAH INTEGER)");
    db.execSQL("create table " + TABLE_QUESTION + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, IDUSER INTEGER, K1 TEXT, K2 TEXT, K3 TEXT, K4 TEXT, K5 TEXT, A1 TEXT, A2 TEXT, A3 TEXT, A4 TEXT, A5 TEXT, V1 TEXT, V2 TEXT, V3 TEXT, V4 TEXT, V5 TEXT, D1 TEXT, D2 TEXT, D3 TEXT, D4 TEXT, D5 TEXT, TOTK INTEGER, TOTA INTEGER, TOTV INTEGER, TOTD INTEGER)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUESTION);
    onCreate(db);
}

public boolean insertDataUser(String nama, String tarikh){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_USER_2, nama);
    contentValues.put(COL_USER_3, tarikh);
    long result = db.insert(TABLE_USER, null, contentValues);

    if(result == -1)
        return false;
    else
        return true;
}

public Cursor getCertainData(String namaUser, String tarikhUser){
    String selectQuery = "select * from " + TABLE_USER + " where NAMA like '" + namaUser + "' AND TARIKH like '" + tarikhUser + "'";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery(selectQuery, null);
    return res;
}

public Cursor getAData(){
    SQLiteDatabase db = this.getWritableDatabase();
    String selectAQuery = "SELECT ID FROM " + TABLE_USER;
    Cursor re = db.rawQuery(selectAQuery, null);
    return re;
}

public boolean insertDataQues(int id, String k1, String k2, String k3, String k4, String k5, String a1, String a2, String a3, String a4, String a5, String v1, String v2, String v3, String v4, String v5, String d1, String d2, String d3, String d4, String d5, int totalk, int totala, int totalv, int totald){
    SQLiteDatabase dbQues = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_QUES_2, id);
    contentValues.put(COL_QUES_3, k1);
    contentValues.put(COL_QUES_4, k2);
    contentValues.put(COL_QUES_5, k3);
    contentValues.put(COL_QUES_6, k4);
    contentValues.put(COL_QUES_7, k5);

    contentValues.put(COL_QUES_8, a1);
    contentValues.put(COL_QUES_9, a2);
    contentValues.put(COL_QUES_10, a3);
    contentValues.put(COL_QUES_11, a4);
    contentValues.put(COL_QUES_12, a5);

    contentValues.put(COL_QUES_13, v1);
    contentValues.put(COL_QUES_14, v2);
    contentValues.put(COL_QUES_15, v3);
    contentValues.put(COL_QUES_16, v4);
    contentValues.put(COL_QUES_17, v5);

    contentValues.put(COL_QUES_18, d1);
    contentValues.put(COL_QUES_19, d2);
    contentValues.put(COL_QUES_20, d3);
    contentValues.put(COL_QUES_21, d4);
    contentValues.put(COL_QUES_22, d5);

    contentValues.put(COL_QUES_23, totalk);
    contentValues.put(COL_QUES_24, totala);
    contentValues.put(COL_QUES_25, totalv);
    contentValues.put(COL_QUES_26, totald);

    long result = dbQues.insert(TABLE_QUESTION, null, contentValues);

    if(result == -1)
        return false;
    else
        return true;
}
}

因此,在 SurveyInstruction.java 的代码中,我仅从 DatabaseHelper.java 调用 getAData() 函数,从数据库中选择一个 ID,但错误显示它为空对象引用。我不知道错误是什么。我希望有人帮助我让它正常工作。谢谢。


初始化数据库助手:

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.surveyinstruction);

    DatabaseHelper db = new DatabaseHelper(this);

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

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法以选择 sqlite 的相关文章

随机推荐

  • Angular 4 - 如何检查 observable 是否包含字符串

    我正在尝试确定可观察对象是否包含字符串 这个问题有两个方面 如何将结果映射回对象 然后在获得该对象后确定它是否包含特定的 orderId 我用这个例子没有运气 如何检查 RxJS Observable 是否包含 Angular2 中的字符串
  • Seaborn groupby 熊猫系列

    我想将我的数据可视化为箱线图 这些箱线图由我可怕的绘图中显示的另一个变量分组 所以我所做的就是使用 pandas 系列变量告诉 pandas 我已经对变量进行了分组 所以这就是我所做的 import pandas as pd import
  • 如何使用 Selenium 和 Python 更改 DOM 中的属性值

    我正在尝试使用 Python 和 Selenium 浏览网站 但遇到了一个我不知道如何解决的问题 假设它甚至是可能的
  • 如何在cloudfront之间设置SSL作为具有EC2自定义源的反向代理缓存?

    我的域名指向 cloudfront 而 cloudfront 又使用自定义源引用我的 EC2 实例 在本例中 它是来自 EC2 的公共 DNS 名称 例如 xxxxx us west 2 compute amazonaws com 这使得它
  • 尝试调用 WCF Webservice 4.0 时出现返回类型无效错误

    我正在尝试编写和调用 WCF Web 服务 以下是详细信息 网页配置
  • 如何在 Parse 上取回用户数据?

    我想取回 Parse t 上 User 中 requestActive 中的数据 我试试这个 var user PFUser var requestActive user requestActive 但是 错误 实例成员 user 不能在类
  • 将 Observable 转换为异步生成器

    我正在尝试将 rxjs 与 babeljs 结合使用来创建一个异步生成器函数 该函数在next被调用 抛出时error被调用 并完成时complete叫做 我遇到的问题是我无法从回调中屈服 I can await处理返回 抛出要求的 Pro
  • 在 Jelly Bean 上访问其他 Android 应用程序的资源

    我有两个 Android 应用程序 一个是免费的 阅读器 应用程序 另一个是付费的 数据 应用程序 其资产的子目录中有一个文本文件 阅读器应用程序使用以下代码来访问数据应用程序的文本文件 Intent myIntent new Intent
  • 如何在 MyBatis 中使用 UUID 类型处理程序和 @Many 注释?

    我正在使用 mybatis spring boot starter 2 1 0 版本 我需要处理 UUID 类型来获取嵌套集合 Select SELECT id name FROM t service s Results value Res
  • 如何在 Android 中的 MapView 上绘制 KML 文件?

    我必须将 KML 文件绘制到 MapView 中 我看了 在互联网上 但我没有找到如何做到这一点的示例 如果有人可以举例说明如何做到这一点 那就太好了 现在不支持 KML 您可以像这样绘制轨迹 无需 KML 1 向Google服务发出请求
  • 在 Visual Studio 中使用控制台应用程序的输出而不是控制台

    当使用 Eclipse 用 Ja va 编写控制台应用程序时 我看到输出被放入 IDE 本身的文本框中 而不是像 Visual Studio 中那样弹出控制台 这很方便 因为即使程序退出后 我仍然可以充分利用其中写入的文本 因为直到再次运行
  • Pandas shift - 如果满足多个条件,则获取先前的值

    我实际上已经问过这个关于 SQL 的问题 并在这里得到了一个很好的答案 SQL 如果满足使用多个先前列的条件 则 LAG 获取先前的值 但现在我需要它来养熊猫 假设我们有一个数据框 df pd DataFrame id 1 2 3 4 5
  • Python 类方法改变自身

    这不适用于我正在做的任何事情 这只是一些测试代码 因为我只是在学习类方法并且很糟糕 但是假设我有以下代码 class Test int def init self arg self arg def thing self self 10 并去
  • 将外部geojson添加到leaflet层

    我是传单和 JavaScript 的新手 我想我可以使用 geocommons 和 GeoJSON 来托管测绘项目的数据 I found 外部 GeoJSON 和 Leaflet 其他方式 本教程介绍如何使用传单插件读取外部 GeoJSON
  • 如果属性名称以 new 开头,应用程序将崩溃

    在我的项目中 我使用 coredata 其中一个实体有一个名为newTotal 在其对应的 NSManagedObject 类中 属性声明如下 property nonatomic strong NSString newTotal 如果我在
  • Yii2 如何从 url 中删除站点/索引和页面参数

    我在默认页面上使用分页 即在 yii2 中的站点 索引上 所以链接器为分页生成的 URL 看起来像这样 domain com site index page 1 我想删除站点 索引和页面参数 使其如下所示 domain com 1 我尝试在
  • WPF 网格水平对齐不起作用。尺寸不变

    我有一个堆栈 堆栈内有一个网格 当我调整窗口大小时 我需要增加堆栈和网格大小 我将 Stack 和 Grid Horizo ntalAlignment 设置为 拉伸 堆栈工作正常 但当我调整窗口大小时 网格大小不会增加 这是我的代码
  • TensorFlow 索引无效(越界)

    您好 我目前正在尝试使用自己的图像数据运行 TensorFlow 但是当我尝试运行这些函数时它崩溃了 它来自 mnist py def loss fn logits labels batch size tf size labels labe
  • opengl:如何避免纹理缩放

    我该如何申请重复无论应用的顶点数据如何 纹理始终保持其原始比例 纹理中的 1 个像素 屏幕上的 1 个像素 我意识到这不是最常见的任务 但是是否可以轻松设置 opengl 来执行此操作 或者我是否需要对尊重其原始外观的顶点数据应用某种掩码
  • java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法以选择 sqlite

    我是安卓世界的新手 我的编码有问题 这只是一个小错误 我不知道它不起作用 即使我改变了其他方法 但错误仍然是相同的错误 这里的错误发生在logcat java lang NullPointerException Attempt to inv