getWritableDatabase()从来没有被称为

问题描述:

简单地说,这是我的课getWritableDatabase()从来没有被称为

public class sqlite extends SQLiteOpenHelper{ 
    public SQLiteDatabase db; 
    public sqlite(Context context , String db_name , int db_version){ 
    super(context, db_name, null, db_version, null); 
    try{this.db=getWritableDatabase();}catch(Exception e){this.db=getReadableDatabase();} 
    } 

当我打电话新sqlite(*****);功能getWritableDatabase()getReadableDatabase()总是导致错误(NullPointerException异常的空对象引用),所以什么是正确的引用我必须打电话来成功执行这些功能?

编辑我发现了一个解决方案,但仍IAM为什么wounder上面的代码不能正常工作? 的解决方案是从源码除去getWritableDatabase()(扩展SQLiteOpenHelper)构造函数的操作方法它的自我,即:直接之前的CRUD方法, 我不知道失败的原因,如果从构造称为

+0

你在哪里使用'db'变量?我认为最好首先实例化你的'sqlite'(为什么是一个类的小写名字?)对象,然后使用它的引用来获得WritableDatabase。 – ishmaelMakitla

+0

@Sherif Eldeeb为什么你想要它在构造函数中调用?从你从哪里获取数据库表,从资产或代码?以便我可以为您提供相同的解决方案。 – Nisarg

+0

@Nisarg来自SyncAdaptor类 –

您需要从构造函数中删除对​​的调用。相反,只要你想使用数据库帮助程序,你可以简单地调用你的sqlite类的实例(我强烈建议你重命名为有意义的东西 - 遵循Java类的适当命名约定)。

//Here is an example (using this from an Activity or some other class): 
//pass appropriate values for the arguments... 
sqlite myDatabaseHelper = new sqlite(context, db_name, db_version); 
//here you can get the writable-database object 
SQLiteDatabase sqlDB = myDatabaseHelper.getWritableDatabase(); 
//from here you can perform your database operations - like querying/inserting values, etc 
+0

我想要在构造函数内或类sqlite本身中调用getWritableDatabase(),即用户不必自己调用此函数 在构造函数中调用getWritableDatabase()会出现什么问题 –