从未在数据库上显式调用 Close

2024-02-01

我有一个来自 sqlite 数据库的列表视图。我在几个不同的点调用 fillData() 来更新列表视图。

private void fillData() {
    readDatabase.open();
    Cursor itemsCursor = readDatabase.fetchAllItems();


    startManagingCursor(itemsCursor);

    String[] from = new String[] { DatabaseHandler.KEY_ITEM,
            DatabaseHandler.KEY_UNITCOST, DatabaseHandler.KEY_QUANTITY,
            DatabaseHandler.KEY_TOTAL };

    int[] to = new int[] { R.id.itemtext, R.id.costtext, R.id.quantitytext,
            R.id.totaltext };

    SimpleCursorAdapter items = new SimpleCursorAdapter(this,
            R.layout.rowincart, itemsCursor, from, to);

    setListAdapter(items);
    }

类的完整代码添加到这里

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.cartactivity);
    readDatabase = new DatabaseHandler(this);
//  readDatabase.open();
    loadwidget();
    fillData();
    ListView lv = getListView();
    this.registerForContextMenu(lv);

}

private void loadwidget() {
    Bundle extras = getIntent().getExtras();
    cost = extras.getInt("Cost");
    quantity = extras.getInt("quantity");
    product = extras.getString("product");
    Log.i("Hello Testing", cost + " and " + quantity + "   " + product);

}

@SuppressWarnings("deprecation")
private void fillData() {
    readDatabase.open();
    itemsCursor = readDatabase.fetchAllItems();


    startManagingCursor(itemsCursor);

    String[] from = new String[] { DatabaseHandler.KEY_ITEM,
            DatabaseHandler.KEY_UNITCOST, DatabaseHandler.KEY_QUANTITY,
            DatabaseHandler.KEY_TOTAL };

    int[] to = new int[] { R.id.itemtext, R.id.costtext, R.id.quantitytext,
            R.id.totaltext };

    SimpleCursorAdapter items = new SimpleCursorAdapter(this,
            R.layout.rowincart, itemsCursor, from, to);

    setListAdapter(items);

    }


@Override
protected void onDestroy() {
    super.onDestroy();
    itemsCursor.close();
    readDatabase.close();
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    menu.setHeaderTitle("SMARTAWAY");

    menu.add(0, DELETE_ID, 1, "Delete Item");

    menu.add(0, UPDATE_ID, 1, "Change Quantity");
}

public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case DELETE_ID:
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                .getMenuInfo();
        readDatabase.deleteItem(info.id);
        fillData();
        return true;
    case UPDATE_ID:

        final AdapterContextMenuInfo info1 = (AdapterContextMenuInfo) item
                .getMenuInfo();
        final Dialog dialog = new Dialog(Cartactivity.this);
        dialog.setContentView(R.layout.dialog);
        final EditText edit0 = (EditText) dialog
                .findViewById(R.id.quantity);
        edit0.setText(String.valueOf(Quantity));
        Button ok = (Button) dialog.findViewById(R.id.ok);
        dialog.setTitle("          Add More Items          ");
        dialog.setCancelable(true);
        Button inc = (Button) dialog.findViewById(R.id.inc);
        inc.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int c = Integer.parseInt(Quantity);
                c = c + 1;
                Quantity = String.valueOf(c);
                edit0.setText(Quantity);

            }
        });
        Button dec = (Button) dialog.findViewById(R.id.dec);
        dec.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int c = Integer.parseInt(Quantity);
                c = c - 1;
                Quantity = String.valueOf(c);
                edit0.setText(Quantity);
            }
        });
        ok.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                row1 = info1.id; 
                flag = 1;
                int b = Integer.parseInt(Quantity);
                int total = cost * b;
                _total = String.valueOf(total);
                _cost = String.valueOf(cost);
                _quantity = String.valueOf(b);
                _item = product;

                Log.i(row1+" id"+_total +" total"+ _cost +" cost"+ _quantity+" quant", "Hello updated database");

                readDatabase.updateItem(row1, _item, _cost, _quantity, _total);

                fillData();

                dialog.dismiss();

            }
        });
        Button cancel = (Button) dialog.findViewById(R.id.cancel);
        cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            dialog.dismiss();   
            }
        });
        dialog.show();

        return true;
    }

    return super.onContextItemSelected(item);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long thisID) {
    super.onListItemClick(l, v, position, thisID);

    l.showContextMenuForChild(v);

    Cursor cursor = (Cursor) getListAdapter().getItem(position);
    Quantity = cursor.getString(cursor
            .getColumnIndex(DatabaseHandler.KEY_QUANTITY));
    /*Total = cursor.getString(cursor
            .getColumnIndex(DatabaseHandler.KEY_TOTAL));*/

}

这里一切都很顺利,但我发现 Logcat 中存在一些错误,即 close() 没有在数据库上显式调用,如下所示。该错误并没有阻止我在任何地方的工作,但问题看起来很奇怪。我想我必须关闭光标,但不确定。我已经关闭了销毁数据库,但不确定游标。请帮忙。

提到了同样的问题here https://stackoverflow.com/questions/5707713/close-was-never-explicitly-called但没有得到实际的解决方案

提前致谢


关闭你的cursor每次使用后您的问题都会得到解决

itemsCursor.close()

由于您没有关闭它,因此当您关闭数据库时,游标的资源不会被释放,您会收到该错误。

将光标设置为全局变量,然后放在您的onDestroy

@Override
protected void onDestroy() {
    super.onDestroy();
    itemsCursor.close();
    db.close();
}

正如您现在添加的那样close声明作为最后一个声明filldata方法,将Adapter of listview没有得到任何数据cursor已经发布,因此您没有获得任何数据listview.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从未在数据库上显式调用 Close 的相关文章

  • 如何对这个字符串进行子串化

    我想得到这个字符串的 4 个部分 String string 10 trillion 896 billion 45 million 56873 我需要的4个部分是 10万亿 8960亿 4500万 和 56873 我所做的是删除所有空格 然
  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 如何跨多个表强制执行 CHECK 约束

    我有一个在 Microsoft SQL Server 2012 Express 中记录奶牛繁殖信息的数据库 显然 一头牛只有在出生后才能配种 并且在其一生中可能会配种多次 我需要在我的数据库中强制执行这些约束 我目前已经根据下图安排了一个架
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • 如何在 JavaScript 中为图像和/或视频制作后退和下一步按钮?

    我正在尝试为 iframe 制作后退和下一步按钮 这是我的代码
  • 重复标准化 IEEE 浮点向量会使其发生变异吗?

    如果我采用 非零 浮点向量 x y z 向量 并将其标准化为单位长度 第二次标准化是否能保证返回相同的结果 我不知道文献中有相关结果 快速测试表明 频繁地对 3D 向量进行两次归一化会导致归一化向量和重新归一化向量之间存在微小差异 即使小心
  • 使用java api的Elasticsearch多条件查询

    有多个文档 每个文档包含大约 100 个字段 我想通过 elasticsearch Java API 5 x 执行以下搜索 我想使用 3 个字段进行此搜索 即 department job name 我想搜索与 部门 D1 部门 D2 工作
  • 如果我有 iPhone SDK 3.2 有什么办法可以使用 3.1.3

    当前的 3 2 SDK 似乎不包含 3 1 3 我如何让它工作 如果您想保留 3 2 2 beta 请下载 3 1 3 SDK 并将其安装在另一个位置 即 Developer313 请参阅下图 了解在哪里单击以进入新的安装位置 替代文本 h
  • 如何在没有 jQuery 的情况下提交表单而不重新加载页面?

    我的表单如下 它需要向我的 java Servlet 发送一个操作来更新数据库 如何在不重新加载页面的情况下提交表单 目前与action myServlet 它不断将我引导到新页面 如果我删除对 myServlet 的操作 输入不会添加到我
  • 模拟器无法升级 xcode 10?

    将 Xcode 9 4 1 更新到 Xcode 10 后 没有任何模拟器可以构建 iOS 应用程序 我的 iOS 应用程序在 Xcode 9 4 1 上完美构建并运行 我有多个这样的警告 警告 iOS Simulator 部署目标设置为 7
  • 将环境变量传递给 Angular2 应用程序?

    我需要将后端 url 传递到我的 Angular2 应用程序 因为生产服务器和开发服务器托管在不同的位置 我知道我可以将这些东西存储在外部 config json 中并在启动时加载 然而 在应用程序启动之前 这似乎是不必要的对服务器的额外调
  • 具有多个条件和列表的 COUNTIF

    我需要计算满足 CRITERIA 1 满足 CRITERIA 2 以及 CRITERIA 3 属于 E 列中包含的值集的单元格数量 我目前正在使用以下公式 SUM COUNTIFS A2 A11 TRUE B2 B11 TRUE C2 C1
  • Haskell 中的 fromInteger 重写

    所以我喜欢Haskell 但对Num类不满意 所以我想为代数类型创建我自己的类型类层次结构 问题是 即使我导入 Prelude 隐藏 Num 以及与之相关的所有内容 使文字 1 具有类型 t 的唯一方法仍然是使 t 实例 Num 我很想从
  • .Net C# String.Join 如果元素值为 null,如何输出“null”而不是空字符串?

    根据String Join 的 MSDN 文档 http msdn microsoft com en us library 57a79xd0 aspx 如果 value 中的任何元素为 null 则使用空字符串 我的代码从数据表中提取数据
  • 如何将 Unix 'Top' 命令输出捕获到 CSV 文件?

    我正在尝试获取前 5 行top通过 shell 脚本命令 我需要将输出写入csv文件 我需要每 15 秒监控一次结果 最后 我需要使用获得的数据表绘制图表 我得到了 shell 脚本来编写前 5 行top命令给一个txt file bin
  • -fomit-frame-pointer *总是*省略 fp 吗?

    是否 fomit frame pointeralways省略帧指针 是否存在pc和fp都需要设置的情况 动态堆栈增长是否会强制设置 fp 专门询问MIPS32 谢谢 正确执行并不真正需要帧指针 除非有时异常展开 动态堆栈增长通常需要某种帧指
  • 管理加载 ZipFile 时分配的内存

    我正在尝试将 69 930 个文件加载到基本文本编辑器中 一切都很顺利 全部加载完毕后 内存就达到了非常酷的 130MB 然而 在高峰加载时间期间 最大容量可达 900MB 1200MB 内存全部引用Inflater buf http gr
  • C++ 重载模式:使用可变 lambda 进行调用解析

    考虑这个众所周知的 C 模式 template
  • 如何获取远程桌面客户端的IP地址?

    我正在尝试编写一个脚本来记录用户启动远程桌面以登录 Windows Server 的 Windows 客户端的 IP 地址 如何在服务器中捕获客户端的IP地址 所以 你忽略代理 在域中使用环境变量 CLIENTNAME 您可以将其解析回IP
  • wordpress:polylang 插件的媒体库问题

    我正在使用 Wordpress 开发一个网站 其中使用 Polylang 插件为多种不同语言制作内容 我使用 Polylang 来表示两种语言 荷兰语 主要 和英语 次要 当我在荷兰语页面上传图像时 一切都很好 但是当我创建一个英文页面 并
  • 使用 PIL 的 ImageDraw 模块

    我正在尝试使用 PIL 的 ImageDraw 模块进行单独的像素操作 下面的代码应该创建 Tkinter 画布小部件 然后打开一张图像 将一个像素的颜色更改为红色 然后将图像嵌入到画布小部件中 但是 它似乎不起作用 My Code imp
  • 如何在 Visual Studio 2012 中编辑 SSRS 2008R2 报告?

    我是一名报告编写者 能够在 Visual Studio 2008 中编辑 更新报告 我们使用 SSRS2008R2 我刚刚安装了 Visual Studio 2012 当我去转换我的报告项目时 它无法工作 因为我似乎缺少一个组件 本质上 项
  • Kafka 连接集群设置或启动连接工作线程

    我正在通过 kafka connect 我正在尝试了解这些概念 假设我已经设置了 kafka 集群 节点 k1 k2 和 k3 并且它正在运行 现在我想在不同节点 例如 c1 和 c2 中以分布式模式运行 kafka 连接工作程序 几个问题
  • 从未在数据库上显式调用 Close

    我有一个来自 sqlite 数据库的列表视图 我在几个不同的点调用 fillData 来更新列表视图 private void fillData readDatabase open Cursor itemsCursor readDataba