2012-01-25 25 views
1

我是新来的android和刚开始使用我的第一个应用程序。任何帮助是极大的赞赏。 我创建了一个dbhelper类,但它以NullPointer异常失败。当我尝试调试时,上下文总是显示为空,因此mDatabase也为空。android-无法访问数据库 - 上下文始终为空

以下是我的代码。

public class PharmaExpDBHelper { 

    static final String DB_NAME = "pharmaApp.db"; 
    static final int VERSION = 1; 
    private SQLiteDatabase db; 
    private Context context; 

    public PharmaExpDBHelper(Context context) { 
     this.context = context; 
     OpenHelper openHelper = new OpenHelper(this.context); 
     this.db = openHelper.getWritableDatabase(); 
    } 


    private static class OpenHelper extends SQLiteOpenHelper { 

     OpenHelper(Context context) { 
      super(context, DB_NAME, null, VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase database) { 
      database.execSQL("CREATE TABLE pharmacy_list(id integer primary key autoincrement, name text);"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      Log.w(PharmaExpDBHelper.class.getName(), 
        "Upgrading database from version " + oldVersion + " to " 
          + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS" + " pharmacy_list"); 
      onCreate(db); 
     } 


    } 

} 
+0

您能给我们与其中引发错误的行号logcat的。 如果你替换OpenHelper openHeloper = new OpenHelper(context)不是this.context你有什么? –

+0

你能告诉我你是如何在活动 – Sameer

+0

中访问这个数据库的吗?我放弃了这一点,并开始了一个项目,因为我从那时开始学习。感谢大家的建议。 – shrmaj

回答

1

我没有看到任何明显错误的发布代码。既然你说Context为空,你应该确保你实例化这个类的地方正在传递一个有效的Context实例。

如果有人通过无效Context作为完整性检查,则可能会帮助您投出IllegalArgumentException

0

到位这段代码

public PharmaExpDBHelper(Context context) { 
    this.context = context; 
    OpenHelper openHelper = new OpenHelper(this.context); 
    this.db = openHelper.getWritableDatabase(); 
} 

使用一个方法的返回SQliteDatabase分贝

public SQLiteDatabase getDBHelper(Context context) { 
    this.context = context; 
    OpenHelper openHelper = new OpenHelper(this.context); 
    this.db = openHelper.getWritableDatabase(); 
    return this.db 
} 

现在访问您的活动

SQLiteDatabase db=PharmaExpDBHelper class Obejct.getDBHelper(context); 
0

公共类PharmaExpDBHelper {

static final String DB_NAME = "pharmaApp.db"; 
static final int VERSION = 1; 
private SQLiteDatabase db; 

private PharmaExpDBHelper(Context context) { 
     super(context, DB_NAME, null, VERSION); 
    } 
@Override  
    public void onCreate(SQLiteDatabase database) {  
     database.execSQL("CREATE TABLE pharmacy_list(id integer primary key autoincrement, name text);");  
    }  

    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
     Log.w(PharmaExpDBHelper.class.getName(),  
       "Upgrading database from version " + oldVersion + " to "  
         + newVersion + ", which will destroy all old data");  
     db.execSQL("DROP TABLE IF EXISTS" + " pharmacy_list");  
     onCreate(db);  
    }  

    public PharmaExpDBHelper open(){ 
       db=PharamExpDBHelper.getWriteableDatabase(); 
      return db; 
    } 
} 

现在在你的活动访问该数据库由

PharmaExpDBHelper dbhHelper=new PharmaExpDBHelper(this); 
db.open(); 

试试这个代码