last modify:2013-11-18 11:20:36
*****************************************
打开一个Activity的时候通过SQLite查询一些数据并显示,出现一个异常:IllegalStateException。
stackoverflow:
java.lang.IllegalStateException: database /data/data/com***/databases/mobile.db (conn# 0) already closed
这是出错代码:
public List<BlackNumber> getList(Integer startIndex,Integer pageSize) { List<BlackNumber> resultList = new ArrayList<BlackNumber>(); SQLiteDatabase rdb = helper.getReadableDatabase(); Cursor cursor = rdb.rawQuery("select number,name,model from blacklist order by _id desc limit ?,?", new String[]{startIndex+"",pageSize+""}); while (cursor.moveToNext()) { String mNumber = cursor.getString(0); String mName = cursor.getString(1); Integer mModel = cursor.getInt(2); BlackNumber bNumber = new BlackNumber(mNumber, mName, mModel); resultList.add(bNumber); } cursor.close(); rdb.close();//修改为:helper.close();就可了 return resultList; }
原因:如果调用SQLiteDatabase.close()代替SQLiteOpenHelper.close()。那么SQLiteOpenHelper就不知道通过helper获取的DB是否是关闭的(getReadableDatabase或getWritableDatabase)。
补充:
1,SQLiteOpenHelper.close()是异步的,而SQLiteDatabase.close()不是。在多线程中要注意,所以养成好的面向对象的习惯,调用helper的close方法关闭数据库。(谁提供的数据,就调用谁的方法来操作数据)
2,在使用安卓提供的SQLiteOpenHelper时,通过getReadableDatabase或getWritableDatabase获得的其实是同一个对象,唯一的却别就是如果你的硬盘不足了,那么你就不能在调用getWritableDatabase,只能调用getReadableDatabase。
3,注意当多个线程操作SQLite数据库时,在一个线程中打开数据库,在另一个线程中是可以将其关闭的。如果你的数据库操作中使用到了多线程。记得在打开和关闭数据库时加锁。
相关推荐
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
IllegalStateException: The specified child already has a parent.我的博客中有文章讲解
标题 "java.lang.IllegalStateException: OutputStream already obtain" 涉及到的是Java编程中的一个常见错误,特别是当处理I/O流时。这个异常通常在尝试获取已经存在的OutputStream实例时抛出,表明该输出流已经被...
1. java.lang.IllegalStateException: No wrapped connection. 2.java.lang.IllegalStateException: Adapter is detached. 原因: 1.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会...
当`targetSdkVersion` 大于等于Android O(API level 26)时,如果活动不设置为全屏模式(即非`windowIsTranslucent`、`windowSwipeToDismiss` 或 `windowIsFloating`),并且尝试通过`setRequestedOrientation`方法...
在Java的Web开发中,`java.lang.IllegalStateException: Cannot call sendError() after the response has been committed` 是一个常见的错误,通常发生在尝试在HTTP响应已经发送到客户端之后调用`sendError()`方法...
01-16 22:18:39.222:E/AndroidHttpClient(26745): java.lang.IllegalStateException: AndroidHttpClient created and never closed ``` **原因分析**: 此错误表明`AndroidHttpClient`对象创建后未曾被正确关闭。`...
### PowerBuilder 中从 Excel 导入数据到 DataWindow 的实现方法 #### 标题解析: 在 PowerBuilder 开发环境中,经常需要将外部数据源(如 Excel 文件)中的数据导入到程序内部的数据展示组件(DataWindow)中进行...
如代码所示,当尝试向ViewSwitcher中添加第三个View时,它会抛出一个`IllegalStateException`,提示“Can’t add more than 2 views to a ViewSwitcher”。这意味着ViewSwitcher只能管理最多两个子View,这是它的一...
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but...
java dubbo admin 2.5.3 + jdk 1.7 亲试 好用 ... java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
在Android平台上,调用摄像机进行录像是一项常见的功能,尤其对于开发移动应用的初学者来说,理解并实现这一功能至关重要。下面将详细讲解如何在Android中实现简单的录像功能。 首先,你需要在AndroidManifest.xml...
* 如果继承自 AppCompatActivity,将会报错,例如:java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity。 解决方法是将 Activity 继承自 Activity,...
8. **异常处理**:在使用MediaRecorder时,要捕获并处理可能的IOException、IllegalStateException和RuntimeException。 9. **释放资源**:录制完成后,记得调用`release()`方法释放MediaRecorder对象,防止内存...
} catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mp.setOnCompletionListener(new OnCompletionListener() { @Override public void on...
(2)为了方便管理,LoadingLayout只能有一个直属子View,类似ScrollView,添加两个直属子View会抛出异常throw new IllegalStateException("LoadingLayout can host only one direct child");; (3)由于AS会直接...
在这个过程中,确保你的应用程序已经处理了所有可能抛出的异常,如`IOException`和`IllegalStateException`。 3. **停止录制**: 当需要停止录制时,调用`stop()`方法。注意,`stop()`可能会抛出`RuntimeException...
4. **IllegalStateException:Activity已启动**: 这个错误通常发生在尝试操作一个已经启动的Fragment时,例如在FragmentTransaction中添加或移除Fragment。错误堆栈跟踪可能指向`FragmentTransaction`的错误使用。...