こんにちは私はサービスで放送受信機を使用してメッセージを取得し、dbで更新しています。私はのいくつかを示して、それがサービスからデータベースに挿入しようとしたときにAndroid sqlliteデータベースロックが発生しました
Caused by: 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
05-13 04:01:46.896 4171-4171/com.example E/AndroidRuntime: at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:274)
05-13 04:01:46.896 4171-4171/com.example E/AndroidRuntime: at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
05-13 04:01:46.896 4171-4171/com.example E/AndroidRuntime: at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
05-13 04:01:46.896 4171-4171/com.example E/AndroidRuntime: at com.scanlibrary.DbHandler.addImage(DbHandler.java:132)
次のエラーを示して私は正常にメッセージを受信するが、それは活動が破壊された場合、DBに挿入しようとするこれまでのとき、私の問題がある(ただし、アプリが実行されている場合、更新が起こっています)私のコード Broadcastreceiver:MainActivity.classで
public static class ReceiveSms extends BroadcastReceiver {
public ReceiveSms(){
super();
}
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
// receive message
MainActivity mainActivity = new MainActivity();
mainActivity.upDateMessage(message);
}
}
:私のDbHandler.classで
public void upDateMessage(String message){
DbHandler db = new DbHandler(this,null,null,1);
db.addImage(message);
}
:
public DbHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
public void addImage(CroppedImageClass cic){
ContentValues values = new ContentValues();
// do some editing
try{
SQLiteDatabase db = this.getWritableDatabase();
db.insert(TABLE_IMAGE, null, values);
db.close();
}catch (NullPointerException npe){
}
}
//コンストラクタは、私はGoogleで検索さが、私は私の問題を解決するための解決策を見つけていませんでした。すべてのヘルプは、あなたが活動
MainActivity mainActivity = new MainActivity();
をインスタンス化することはありません感謝し、事前
あなたがデータベース名を宣言していないので、 'DbHandler'クラスを投稿してください。NPE'を取得します。 –
これはコンストラクタでデータベース名を直接指しているのでnull値を渡しているだけです。 – Karthik