我的申请会给我这个警告
数据库的SQLiteConnection对象 &#39 + +数据数据+ com_example_test +数据库'被泄露了!请修理 您的应用程序正确结束正在进行的事务并关闭 数据库不再需要时。
但是每次使用后我都会关闭db对象和光标。
try {
while (cursor.moveToNext()) {
...
}
} finally {
if (cursor != null && !cursor.isClosed())
cursor.close();
}
...
db.close();
你能帮我理解是什么问题吗? 感谢!!!
更新<!/强> 我从这篇文章中尝试这个解决方案 SQLite Connection leaked although everything closed
我不再有内存泄漏,这是一个很好的解决方案吗?
答案 0 :(得分:26)
可能的解决方案:
not committed the transactions
(你应该
一旦你开始,总是关闭交易)Sqlite
(看起来你已经从发布的代码中完成了这一步)db.close
移至finally
阻止db.close
,然后使用context.deleteDatabase(...)
将其删除,然后使用dbHelper.getWritableDatabase()
重新创建答案 1 :(得分:7)
只需将db.close
向上拖动到finally
区块。
答案 2 :(得分:1)
//Inside your SQLite helper class
@Override
public synchronized void close () {
if (db != null) {
db.close();
super.close();
}
}
//Inside the activity that makes a connection to the helper class
@Override
protected void onDestroy () {
super.onDestroy();
//call close() of the helper class
dbHelper.close();
}
答案 3 :(得分:0)
在我的情况下,当y尝试下载新数据时会导致错误,并且应该更新数据库。
我通过调用else
解决了它实例化数据库的问题。这导致数据库被更新,所以在那之后我尝试下载新数据。工作得很好。
答案 4 :(得分:0)
您可能忘记删除调试的断点 样品: enter image description here
答案 5 :(得分:-4)
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()){
case R.id.settings:
Log.i("Menu item selected", "Settings");
return true;
case R.id.help:
Log.i("Menu item selected", "Help");
return true;
default:
return false;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
这给了我数据库对象泄漏错误。 尽管该应用程序运行正常,并且还登录了“运行”标签,但是android监视器向我显示了该错误,但未记录信息。