Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从服务和onClick访问sqlite数据库时发生冲突_Android_Multithreading_Sqlite_Service - Fatal编程技术网

Android 从服务和onClick访问sqlite数据库时发生冲突

Android 从服务和onClick访问sqlite数据库时发生冲突,android,multithreading,sqlite,service,Android,Multithreading,Sqlite,Service,在我的android应用程序中,我可以从以下位置访问我的sqlite数据库: 1) 服务android,每60秒一次 2) 按下按钮后(onclik) 如果在我的服务访问数据库时按下该按钮,则会发生错误 因此,在访问数据库之前,我在onclickListener中插入了对stopService()的调用 但冲突依然存在,因为即使我在访问数据库之前调用stopService(),服务也会在此之后停止 我尝试使用: private boolean isMyServiceRunning() {

在我的android应用程序中,我可以从以下位置访问我的sqlite数据库:

1) 服务android,每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;
 }
建议于

在访问数据库之前,我尝试以以下方式调用此方法:

    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)

您可以覆盖服务的
ondestory()
事件,并尝试访问其中的数据库:

@覆盖
公共空间{
//***访问我的数据库***
super.ondestory();
}

您能否公布您面临的冲突类型?你们在服务中关闭数据库吗?是的,@Jagdeep,我在服务中关闭数据库。我编辑我的问题,添加错误