首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用意图从活动启动活动时会产生未捕获的错误

使用意图从活动启动活动时会产生未捕获的错误
EN

Stack Overflow用户
提问于 2011-10-12 03:15:59
回答 2查看 85关注 0票数 0

关于我的主要活动:

代码语言:javascript
运行
复制
button = (Button) findViewById(R.id.mainAddWatchButton);
button.setOnClickListener(new Button.OnClickListener() {
  public void onClick(View v) {
    startActivity(new Intent(audiovideo, CountyBrowser.class));
  }
});

CountyBrowser活动开始很好(行为也很好,就像它应该做的那样),但在LogCat中会出现以下内容:

代码语言:javascript
运行
复制
10-11 19:10:41.182: INFO/ActivityManager(58): Starting activity: Intent { cmp=se.ribit.bb/.CountyBrowser }
10-11 19:10:41.782: DEBUG/dalvikvm(368): GC freed 6313 objects / 354184 bytes in 114ms
10-11 19:10:41.812: INFO/dalvikvm(368): Uncaught exception thrown by finalizer (will be discarded):
10-11 19:10:41.812: INFO/dalvikvm(368): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@43d3ec38 on null that has not been deactivated or closed
10-11 19:10:41.823: INFO/dalvikvm(368):     at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)
10-11 19:10:41.823: INFO/dalvikvm(368):     at dalvik.system.NativeStart.run(Native Method)
10-11 19:10:41.852: INFO/dalvikvm(368): Uncaught exception thrown by finalizer (will be discarded):
10-11 19:10:41.862: INFO/dalvikvm(368): Ljava/lang/IllegalStateException;: **Finalizing cursor android.database.sqlite.SQLiteCursor@43d3dc80 on null that has not been deactivated or closed**
10-11 19:10:41.862: INFO/dalvikvm(368):     at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)
10-11 19:10:41.873: INFO/dalvikvm(368):     at dalvik.system.NativeStart.run(Native Method)
10-11 19:10:42.452: INFO/ActivityManager(58): Displayed activity se.ribit.bb/.CountyBrowser: 1198 ms (total 1198 ms)
10-11 19:10:47.702: DEBUG/dalvikvm(206): GC freed 124 objects / 5424 bytes in 154ms
10-11 19:10:52.692: DEBUG/dalvikvm(105): GC freed 2292 objects / 133288 bytes in 107ms

我使用的是数据库和游标,但上面的消息包含的信息为零,无论我是否做错了什么。除了这些日志之外,活动运行正常。如果我在调试模式下运行所有东西,仿真器会一直将我抛回Eclipse。

我是不是漏掉了什么?有人想猜猜我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-12 03:24:15

我认为您必须在活动暂停之前关闭光标。在打开新活动的活动的onPause方法中,尝试关闭光标。

代码语言:javascript
运行
复制
void onPause(){
  myCursor1.close();
  myCursor2.close();
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-13 07:02:01

经过大量的单步调试,我找到了错误的根源。我有这样的方法:

代码语言:javascript
运行
复制
private boolean doesColumnExist(String table, int id) {
  SQLiteDatabase db = this.dbHelper.getReadableDatabase();
  String query = String.format("SELECT count(*) FROM %s WHERE %s = %s",
                                table, C_ID, id);
  Cursor c = db.rawQuery(query, null);
  c.moveToFirst();
  return (c.getInt(0) == 1);
}

我还不太擅长Java,所以我天真地认为当这个方法返回时,游标应该自动死亡,但我显然对这个事实大错特错了。我不得不将该方法重写为:

代码语言:javascript
运行
复制
private boolean doesColumnExist(String table, int id) {
  SQLiteDatabase db = this.dbHelper.getReadableDatabase();
  String query = String.format("SELECT count(*) FROM %s WHERE %s = %s",
                                table, C_ID, id);
  Cursor c = db.rawQuery(query, null);
  c.moveToFirst();
  boolean retVal = (c.getInt(0) == 1);
  c.close();

  return retVal;
}

现在,所有的LogCat填充物都消失了。

我从来没有意识到我必须手动执行c.close()。由于我是Java的新手,我认为Java的GC可以处理它。进一步阅读我的Java书证明我错了,大错特错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7731267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档