gpt4 book ai didi

android - 从 Service 和 onClick 访问 sqlite 数据库 android 时发生冲突

转载 作者:行者123 更新时间:2023-11-29 02:00:01 25 4
gpt4 key购买 nike

在我的 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;
}

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)

最佳答案

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

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

关于android - 从 Service 和 onClick 访问 sqlite 数据库 android 时发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com