java - 插入 SQLite 数据库 - Android

标签 java android sqlite nullpointerexception

我正在尝试为高分表实现 SQLite 数据库。我只是测试它,看看我的数据库创建和插入是否可以使用下面的代码。但我在下面几行收到 NullPointerException。

提前谢谢您!

结果.java

public class Results extends Activity {
    DatabaseHelper dh;

    public void onCreate(Bundle savedInstanceState) {
        dh = DatabaseHelper.getInstance(this);

    public void showResults() {
        dh.openDB();  
        dh.insert(1231423, 436346);  //Line 104
    }
}

DatabaseHelper.java

private static final String SCORE = "score"; 
private static final String PERCENTAGE = "percentage";
public static DatabaseHelper mSingleton = null;

public synchronized static DatabaseHelper getInstance(Context context) {
    if(mSingleton == null) {
        mSingleton = new DatabaseHelper(context.getApplicationContext());
    }
    return mSingleton;
}

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

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

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

LogCat 输出

01-02 17:56:47.609: E/AndroidRuntime(1322): FATAL EXCEPTION: main
01-02 17:56:47.609: E/AndroidRuntime(1322): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.Results}: java.lang.NullPointerException
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.os.Looper.loop(Looper.java:137)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.ActivityThread.main(ActivityThread.java:4745)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at java.lang.reflect.Method.invokeNative(Native Method)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at java.lang.reflect.Method.invoke(Method.java:511)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at dalvik.system.NativeStart.main(Native Method)
01-02 17:56:47.609: E/AndroidRuntime(1322): Caused by: java.lang.NullPointerException
01-02 17:56:47.609: E/AndroidRuntime(1322):     at com.example.test.DatabaseHelper.insert(DatabaseHelper.java:91)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at com.example.test.Results.showResults(Results.java:104)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at com.example.test.Results.onCreate(Results.java:50)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.Activity.performCreate(Activity.java:5008)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-02 17:56:47.609: E/AndroidRuntime(1322):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-02 17:56:47.609: E/AndroidRuntime(1322):     ... 11 more

编辑: NullPointerException 至少会跳来跳去,但错误仍然存​​在。我已经编辑了代码并发布了新的 LogCat 输出。

最佳答案

更改openDB()以保存它打开的SqliteDatabase并打开一个可写数据库:

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

但这仍然与您的堆栈跟踪不匹配,但它与您提供的代码匹配。

关于java - 插入 SQLite 数据库 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130277/

相关文章:

java - 需要查找每 X 分钟到几小时之间的数据

java - 与 Teradata 进行全局交易

java - 如何从代码调用调试器?

android - 强制崩溃 react native 应用程序以进行错误测试

javascript - Node.js SQLite 3 返回 promise

java - 如何在带有通配符的泛型映射中使用带有类型化参数的泛型集合 (Java)

android - 如何使用带有自定义入口点的 FlutterFragment 在我的 Android 应用程序中嵌入 Flutter 布局?

android - 上传图片时 Firebase 应用程序崩溃

json - 如何将 Django 中现有 JSON 文件的数据存储到 SQLite 数据库中?

android - 未创建 SQlite 表,但在 Android 中创建了数据库