gpt4 book ai didi

android - SQLiteDatabase 对象被作为 Null 传递,即使在构造函数中初始化时也是如此

转载 作者:行者123 更新时间:2023-11-30 01:54:26 26 4
gpt4 key购买 nike

过去几天我在这方面遇到了错误,尝试使用断点来弄清楚为什么它会给出空指针异常,但我无法理解哪个值被卡住了。我怎样才能使 db 不为空,以便运行此代码。我有一个抽象类,它在某些条件语句上调用此方法。它必须返回一个长值。哪个将用于其他方法。

此方法 long save 是在另一个类中实现的,该类在调用 db.insert 后返回一个值,但我得到空指针异常

java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference

我有以下疑问:

  1. 为什么当我在 Fragment 中使用它时出现错误,但当我与 Activity 一起使用时它工作正常。可能是什么原因。
  2. 另外,当我将 db 作为参数传递时,如何调用 getWritableDatabase。

    long save(SQLiteDatabase db) {


    ContentValues cv = new ContentValues();
    long now = System.currentTimeMillis();
    cv.put(COL_CREATEDTIME, now);
    cv.put(COL_MODIFIEDTIME, now);
    //cv.putNull(COL_MODIFIEDTIME);
    cv.put(COL_NAME, name==null ? "" : name);
    //if (fromDate != null)
    cv.put(COL_FROMDATE, fromDate==null ? "" :fromDate);
    //if (toDate != null)
    cv.put(COL_TODATE, toDate==null ? "" :toDate);
    //if (rule != null)
    cv.put(COL_RULE, rule==null ? "" :rule);
    //if (interval != null)
    cv.put(COL_INTERVAL, interval==null ? "" :interval);
    cv.put(COL_SOUND, sound ? 1 : 0);
    //if (sound != null)

    //Log.e(TAG, "Error inserting " + now);
    return db.insert(TABLE_NAME,null, cv);}

db Usage. Hope this helps to understand the flow of the code

public class DosageDB extends Application {


public static DBHelper dbHelper;
public static SQLiteDatabase db;

public static final String TIME_OPTION = "time_option";
public static final String DATE_RANGE = "date_range";
public static final String DATE_FORMAT = "date_format";
public static final String TIME_FORMAT = "time_format";
public static final String VIBRATE_PREF = "vibrate_pref";
public static final String RINGTONE_PREF = "ringtone_pref";

public static final String DEFAULT_DATE_FORMAT = "yyyy-M-d";

@Override
public void onCreate() {
super.onCreate();

PreferenceManager.setDefaultValues(this,R.xml.settings, false);
sp = PreferenceManager.getDefaultSharedPreferences(this);

dbHelper = new DBHelper(this);
db = dbHelper.getWritableDatabase();


}
}

堆栈跟踪:

09-10 15:05:39.582    2423-2423/healerkart.com.dosage E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: healerkart.com.dosage, PID: 2423
java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference
at healerkart.com.dosage.Delta.Alarm.save(Alarm.java:65)
at healerkart.com.dosage.Delta.AbstractModel.persist(AbstractModel.java:54)
at healerkart.com.dosage.Delta.Alarm.persist(Alarm.java:10)
at healerkart.com.dosage.Alpha.dosageFrag$2.onClick(dosageFrag.java:134)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

最佳答案

由于 DosageDB 正在扩展应用程序,我忘记在 AndroidManifest.xml 中提及应用程序名称属性不管怎么说,多谢拉。

关于android - SQLiteDatabase 对象被作为 Null 传递,即使在构造函数中初始化时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32496707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com