我在我的微调器上检索我选择的值之后尝试关闭我的游标,看看它是否会有所帮助,但它没有。由于我的旋转器依赖其他旋转器来获得正确的值,因此在关闭光标后没有任何值会导致我的应用程序崩溃。
这仅在API <16时发生。 它也只是在我在我的布局中点击一个微调器之后,甚至在我在微调器对话框中选择一个项目之前。
onDestroy()
protected void onDestroy()
{
super.onDestroy();
myDataBase.close();
}
close()
@Override
public void close() {
if(myDataBase != null){
myDataBase.close();
}
}
这是LogCat:
06-13 15:18:36.256: E/SQLiteDatabase(736): close() was never explicitly called on database '/data/data/com.example.productguide/databases/products.db'
06-13 15:18:36.256: E/SQLiteDatabase(736): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1980)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:977)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:745)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
06-13 15:18:36.256: E/SQLiteDatabase(736): at com.example.productguide.DataBaseHelper.createDataBase(DataBaseHelper.java:146)
06-13 15:18:36.256: E/SQLiteDatabase(736): at com.example.productguide.ProductActivity.onCreate(ProductActivity.java:83)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.Activity.performCreate(Activity.java:4397)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.ActivityThread.access$500(ActivityThread.java:122)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.os.Handler.dispatchMessage(Handler.java:99)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.os.Looper.loop(Looper.java:132)
06-13 15:18:36.256: E/SQLiteDatabase(736): at android.app.ActivityThread.main(ActivityThread.java:4123)
06-13 15:18:36.256: E/SQLiteDatabase(736): at java.lang.reflect.Method.invokeNative(Native Method)
06-13 15:18:36.256: E/SQLiteDatabase(736): at java.lang.reflect.Method.invoke(Method.java:491)
06-13 15:18:36.256: E/SQLiteDatabase(736): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-13 15:18:36.256: E/SQLiteDatabase(736): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-13 15:18:36.256: E/SQLiteDatabase(736): at dalvik.system.NativeStart.main(Native Method)
编辑: 即使在关闭并重新打开应用程序之后,这似乎也只发生过一次。
答案 0 :(得分:0)
我使用此tutorial来使用现有数据库。在使用了教程中用户评论的一些提示后,我开始收到Close()从未调用过数据库错误。
在关注我的LogCat之后,我找到了我的修复程序。我没有在我的createDatabase()
和我的copyDatabase()
中关闭我的数据库。我不确定我添加到代码中的修复程序是否会在将来导致其他问题,但是在我的应用程序支持的API上进行测试,我没有收到任何错误。
这是我添加到我的代码中以使其无任何错误地工作:
而不是this.getWritableDatabase();
createDatabase()
我使用了this.getWritableDatabase().close();
我添加了
if(myDatabase != null)
{
myDatabase.close();
}
在checkdb = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
copyDatabase()
下的try / catch中