【问题标题】:Failed to invoke android SQLite database调用android SQLite数据库失败
【发布时间】:2020-10-30 08:17:06
【问题描述】:

我有一个使用 SQLite 数据库的应用程序,但在一半的 android 设备上,调用它时出现问题,我收到此错误。 虽然我正在使用这些行:

        DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
        SQLiteDatabase database = databaseHelper.getWritableDatabase();
        databaseHelper.onCreate(database);

启动我的数据库的代码,仍然出现此错误:

Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference`.

如果你能帮我解决这个问题,我会很高兴。


以下代码适用于我的数据库助手类: ` 公共类 DatabaseHelper 扩展 SQLiteOpenHelper {

public DatabaseHelper(Context context) {
    super(context, "foods_database.db", null, 2);
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table if not exists foods(sFoodName text, sUniteIndex text)");

}

public void deleteFoodsTable(SQLiteDatabase database){
    database.execSQL("drop table if exists foods");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}

}`

这些代码行用于启动数据库助手并将项目添加到数据库:

                DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
                SQLiteDatabase database = databaseHelper.getWritableDatabase();
                databaseHelper.onCreate(database);

                ContentValues values = new ContentValues();

                for (int i = 0; i < foodsList.size() ; i++){
                    values.put("sFoodName" , foodsList.get(i).getFoodName());
                    values.put("sUniteIndex" , TextUtils.join("," , foodsList.get(i).getUnitesIndexArray()));

                    database.insert("foods" , null , values);

                }

                database.close();

【问题讨论】:

    标签: java android sqlite android-sqlite sqliteopenhelper


    【解决方案1】:

    您可以在数据库类中初始化您的数据库对象 像这样:

    public void createDB()
    {
      DatabaseHelper databaseHelper = new DatabaseHelper(context);
        SQLiteDatabase database = databaseHelper.getWritableDatabase();
    }
    

    然后像这样在片段内部调用这个函数

    DBclass classobject = new DBclass(getActivity());
    classobject.createDB();
    

    我希望你的错误会消失:)

    【讨论】:

    • 目前,我正在使用它,但它对我没有帮助。
    • 这些用于启动数据库:` DatabaseHelper databaseHelper = new DatabaseHelper(getActivity()); SQLiteDatabase 数据库 = databaseHelper.getWritableDatabase(); databaseHelper.onCreate(数据库); `
    • 你为数据库做单独的类?
    • 创建应用程序类并在其中初始化数据库,就像这个 public class DataClass extends Application { public void createDB() { DatabaseHelper databaseHelper = new DatabaseHelper(context); SQLiteDatabase 数据库 = databaseHelper.getWritableDatabase();然后像这样调用 DataClass dataclass= new DataClass();数据类.createDB();
    • 我更新了我的问题,请查看代码并发表您的评论
    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多