2012-01-25 10 views
1

私はアンドロイドを初めて使っていて、最初のアプリを使い始めました。どんな助けでも大歓迎です。 dbhelperクラスを作成しましたが、失敗するのはNullPointer例外です。私がデバッグしようとすると、コンテキストは常にnullであるように見えます。その結果、mD​​atabaseもnullになります。アンドロイド - dbコンテキストに常にアクセスできません

以下は私のコードです。

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

このコードを試してみてください

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

によって、あなたの活動では、このデータベースにアクセスし、あなたは私たちにエラーが発生した行番号とlogcatを与えることができます。 OpenHelperを置き換えた場合、openHeloper = new OpenHelper(コンテキスト)ではなくthis.context何を持っていましたか? –

+0

アクティビティでこのデータベースにアクセスする方法を教えてください – Sameer

+0

私はこれをあきらめて、私が学んで以来、最初からプロジェクトを始めました。みなさん、おかげさまで提案に感謝します。 – shrmaj

答えて

1

投稿されたコードで明らかに間違ったことはありません。 Contextがnullであると言うので、このクラスをインスタンス化する場所が有効なContextインスタンスを渡していることを確認する必要があります。

誰かがnullを渡した場合はIllegalArgumentExceptionを送信すると役立ちます。Contextは健全性チェックです。このコード

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 
} 

の代わりに

0

今すぐパブリッククラスPharmaExpDBHelper {

0

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

あなたの活動でアクセス
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; 
    } 
} 

関連する問題