【问题标题】:Database LEAK, when taking a photo. SQLiteDatabase created and never closed. Android, Java, SQLite数据库泄漏,拍照时。 SQLiteDatabase 创建并且从未关闭。安卓、Java、SQLite
【发布时间】:2011-03-31 07:43:31
【问题描述】:

再次问候。我在拍照时遇到了一个小问题。我有一个按钮,可以调用相机,成功拍照,然后返回我的输入表单。我唯一的问题是按下按钮调用相机时发生的数据库泄漏。我的代码看起来有点像这样。

public void takephoto(){

        Intent in = new
        Intent(this, takephoto.class);
        startActivityForResult(in,1);
    }

这是一个关于如何打开数据库的 sn-p:

 public journalDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }

我跑:

mDbHelper = new journalDbAdapter(this);
        mDbHelper.open();

在我调用相机的 Activity 或 Class 的 onCreate 中。我没有在 mDbHelper.close(); 中编码任何地方都不确定我是否应该何时何地。我想我宁愿在捕捉一张图像时让它保持打开状态。

Logcat:

08-17 21:33:37.582:错误/数据库(18297):java.lang.IllegalStateException:/data/data/com.growjournal.beta/databases/grower SQLiteDatabase 创建且从未关闭 08-17 21:33:37.582:错误/数据库(18297):在 android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1785)

如果这个问题从未得到解决,我可能会面临哪些问题?

一切似乎都运行良好,但我很想避免在众多安卓设备中出现任何问题。

【问题讨论】:

  • 你能显示更多代码吗,比如任何与数据库相关的代码?
  • 我当然可以。您能否具体说明一下您可能要寻找的东西? ...代码很多
  • 请在您实际创建/打开数据库 (mDb) 的位置发布代码。
  • 我假设来自我的适配器,在这里。

标签: java android sqlite memory-leaks


【解决方案1】:

您收到此错误是因为相机应用程序占用大量内存,并且很可能导致您的应用程序关闭而不是暂停。您应该保存您的记录并在 onPause 中关闭数据库,然后在 onResume 和/或 onCreate 中重新打开它。

【讨论】:

  • 我没有使用单独的相机应用程序。我有自己的活动,使用相机并保存到我指定的目录。
【解决方案2】:

我认为你错过了这一行

mDb.close();

【讨论】:

  • 拍照时需要关闭吗?返回时是否会重新启动并重新打开数据库?
  • 否,将记录插入数据库后,您应该关闭它
  • 仍然不确定该放在哪里,应该放在我的数据库适配器中还是在我更新字段的活动中。我试着把它放在几个地方,但开始强制关闭。我真的需要为应用程序中的所有内容打开它,因为每个屏幕都在拉列表或编辑/创建记录。除了相机
  • 我无法正确理解您的代码。但是,如果您只需要捕获图像并将其存储在应用程序的数据库中,请检查此程序。在 onActivityResult 他们将启动一个方法,该方法将返回一个位图,该位图需要作为 blob 存储在数据库中。此时您可以打开您的数据库并在完成后关闭它labs.makemachine.net/wp-content/uploads/2010/03/…
  • 我没有直接将图像保存到数据库;而是在编辑或创建记录的过程中(填写表格)。有一个按钮可以拍摄和保存照片。根据日志猫的说法,在我打电话给相机之前,我没有泄漏。我假设当我没有的时候,java 认为我已经完成了数据库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多