0

您好我正在使用服務中的廣播接收器來獲取消息並在db中更新它。我成功接收的消息,但是當以往任何時候都試圖在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) 

我表現出一定的我的代碼 廣播接收器:

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); 
    } 
} 

在MainActivity.class:

public void upDateMessage(String message){ 
    DbHandler db = new DbHandler(this,null,null,1); 
    db.addImage(message); 
} 

在我DbHandler.class:

//構造

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){ 

    } 
} 

我搜索谷歌,但我沒有找到一個解決方案來解決我的問題。任何幫助將不勝感激,並提前

感謝
+0

請發帖'DbHandler'類,你得到'NPE',我想因爲你沒有聲明數據庫名 –

+0

我在構造函數中直接提到數據庫名,所以只有我傳遞null值 – Karthik

回答

0

你不應該實例化一個活動

MainActivity mainActivity = new MainActivity(); 

這個對象不是任何生命週期的一部分,更不用說以任何方式設置爲背景。

如果您想要一項活動或服務來處理您的數據庫操作,您需要爲此創建一個意向並致電context.startActivity(intent)context.startService(intent)。該消息可以作爲額外的意圖添加。

此外,如果你這樣做

public DbHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
} 

刪除您不使用的參數。構造函數

public DbHandler(Context context, SQLiteDatabase.CursorFactory factory) { 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
} 

就足夠了。

+0

嗨,謝謝你像我說​​的那樣使用意圖,但它會自動啓動活動,但我不想開始我使用的活動意圖intent1 =新的意圖(上下文,MainActivity.class); intent1.putExtra(「message」,content);而不是 intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1);而不是實例化活動 – Karthik

+0

爲什麼不使用服務呢? – tynn

+0

是的,我只在服務中使用服務我使用廣播接收機 – Karthik

相關問題