2012-10-30 61 views
2

在我的應用程序的Android,我可以訪問我的SQLite數據庫:衝突訪問SQLite數據庫的Android,從服務和的onClick

1)服務機器人,每60秒。

2)鈕的壓力之後(onclik)

如果我按下按鈕而我的服務正在訪問發生錯誤的數據庫。

所以我插在onclickListener,訪問數據庫之前,要stopService()的調用

但是衝突仍然存在,因爲,即使我進入數據庫之前調用stopService(),該服務被停止後,這個!

我嘗試使用:

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if ("com.example.MyService".equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

How to check if a service is running on Android?

建議我嘗試調用此方法,訪問數據庫之前,以這種方式:

while(isMyServiceRunning()) 
    { 
     // do nothing 
    } 

    // *** access to my database *** 

我能做些什麼爲了確保在訪問數據庫之前我的服務已停止?

的錯誤是:

10-30 21:05:43.360: E/SQLiteDatabase(13960): Failed to open the database. closing it. 
10-30 21:05:43.360: E/SQLiteDatabase(13960):  android.database.sqlite.SQLiteDatabaseLockedException: database is locked 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:2115) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:984) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:753) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149) 
10-30 21:05:43.360: E/SQLiteDatabase(13960): at host.database.DB_DatabaseManager.open(DB_DatabaseManager.java:134) 
+0

你可以發佈你面對什麼樣的衝突? 你關閉數據庫在你的服務? –

+0

是的,@Jagdeep,我關閉服務中的數據庫。我編輯我的問題,添加錯誤 – GVillani82

回答

1

您可以覆蓋onDestroy()事件服務,並試圖訪問其數據庫:

@Override 
public void onDestroy() { 
    // *** access to my database *** 
    super.onDestroy(); 
}