StaleDataException:尝试在关闭游标后访问它

2024-04-15

FATAL EXCEPTION: main
Process: com.example.lenovo.phone, PID: 4885
android.database.StaleDataException: Attempted to access a cursor after it has been closed.
at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:64)
at android.database.BulkCursorToCursorAdaptor.requery(BulkCursorToCursorAdaptor.java:133)
at android.database.CursorWrapper.requery(CursorWrapper.java:186)
at android.app.Activity.performRestart(Activity.java:5309)
at android.app.ActivityThread.handleSleeping(ActivityThread.java:3514)
at android.app.ActivityThread.access$2900(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1500)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)                                                                               
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
at dalvik.system.NativeStart.main(Native Method)

删除这个:

protected SQLiteDatabase database;

并使其本地化

基本上有 2 个方法同时执行,其中一个方法被调用database.close()第二种方法仍在访问数据,因此Exception

用这个:

public class db {

DataBaseHelper dbHelper;
Context mContext;


public db(Context context) {
    this.mContext = context;
}

public db open() throws SQLException {
    dbHelper = new DataBaseHelper(mContext);
    return this;
}


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

public void insertdb( int id,String ph_num, String call_type, String calldate, String call_duration, String upload_status) {
    SQLiteDatabase database = dbHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(DataBaseHelper.id,id);
    values.put(DataBaseHelper.phone_number, ph_num);
    values.put(DataBaseHelper.call_type, call_type);
    values.put(DataBaseHelper.call_date, calldate);
    values.put(DataBaseHelper.call_duration, call_duration);
    values.put(DataBaseHelper.upload_status, upload_status);
    database.insert(DataBaseHelper.table_name, null, values);
    database.close();
    // Log.d("Database helper", "values inserted");
}


public ArrayList<HashMap<String, String>> getAllUsers() {
    ArrayList<HashMap<String, String>> wordList;
    wordList = new ArrayList<HashMap<String, String>>();
    String selectQuery = "SELECT  * FROM call_logtable";
    SQLiteDatabase database = dbHelper.getWritableDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("id", cursor.getString(0));
            map.put("phone_number", cursor.getString(1));
            map.put("call_type", cursor.getString(2));
            map.put("call_date", cursor.getString(3));
            map.put("call_duration", cursor.getString(4));
            wordList.add(map);
        } while (cursor.moveToNext());
    }
    cursor.close(); // just added
    database.close();
    return wordList;
}

/**
 * Compose JSON out of SQLite records
 * @return
 */
public String composeJSONfromSQLite(){
    ArrayList<HashMap<String, String>> wordList;
    wordList = new ArrayList<HashMap<String, String>>();
    String selectQuery = "SELECT  * FROM call_logtable where upload_status = '"+"no"+"'";
    SQLiteDatabase database = dbHelper.getWritableDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("id", cursor.getString(0));
            map.put("phone_number", cursor.getString(1));
            map.put("call_type", cursor.getString(2));
            map.put("call_date", cursor.getString(3));
            map.put("call_duration", cursor.getString(4));
            wordList.add(map);
        } while (cursor.moveToNext());
    }
    cursor.close(); // just added
    database.close();
    Gson gson = new GsonBuilder().create();
    //Use GSON to serialize Array List to JSON
    return gson.toJson(wordList);
}


public int dbSyncCount(){
    int count = 0;
    String selectQuery = "SELECT  * FROM call_logtable where upload_status = '"+"no"+"'";
    SQLiteDatabase database = dbHelper.getWritableDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);
    count = cursor.getCount();
    cursor.close(); // just added
    database.close();
    return count;
}


public void updateSyncStatus(String id, String status){
    SQLiteDatabase database = dbHelper.getWritableDatabase();
    String updateQuery = "Update call_logtable set upload_status = '"+ status +"' where id="+"'"+ id +"'";
    Log.d("query", updateQuery);
    database.execSQL(updateQuery);
    database.close();
}

public Cursor getinformation()
{
    SQLiteDatabase database = dbHelper.getReadableDatabase();
    String[] columns={DataBaseHelper.phone_number,DataBaseHelper.call_type,DataBaseHelper.call_date,DataBaseHelper.call_duration,DataBaseHelper.upload_status};
    return database.query(DataBaseHelper.table_name,columns,null,null,null,null,null);
}

public void delete()
{
    SQLiteDatabase database = dbHelper.getWritableDatabase();
    // String[] columns={DataBaseHelper.phone_number,DataBaseHelper.call_type,DataBaseHelper.call_date,DataBaseHelper.call_duration};
    database.delete(DataBaseHelper.table_name, null, null);
}


StringBuffer readSpecificfrom_db(String type)
{
    String ph_number=null;
    String call_type=null;
    String call_date=null;
    String call_duration=null;
    String upload_status=null;
    StringBuffer sb = new StringBuffer();
    //sb.append("Call Log :");
    Cursor cursor_object=getinformation();
    cursor_object.moveToFirst();
    do {
        if((cursor_object.getString(1)).equals(type)) {
            ph_number = cursor_object.getString(0);
            call_type = cursor_object.getString(1);
            call_date = cursor_object.getString(2);
            call_duration = cursor_object.getString(3);
            if(type=="Missed") {
                sb.append("\nPhone Number:--- " + ph_number +
                                " \nCall Type:--- " + call_type +
                                " \nCall Date:--- " + call_date
                        //   + " \nCall duration in sec :--- " + call_duration
                );
                sb.append("\n----------------------------------");
            }
            else
            {
                sb.append("\nPhone Number:--- " + ph_number +
                        " \nCall Type:--- " + call_type +
                        " \nCall Date:--- " + call_date
                        + " \nCall duration in sec :--- " + call_duration);
                sb.append("\n----------------------------------");
            }
        }
    }while(cursor_object.moveToNext());
    cursor_object.close(); // just added
    return sb;

}

StringBuffer readfrom_db()
{
    String ph_number=null;
    String call_type=null;
    String call_date=null;
    String call_duration=null;
    String upload_status;
    //  int id=0;
    StringBuffer sb = new StringBuffer();
    // sb.append("Call Log :");
    Cursor cursor_object=getinformation();
    cursor_object.moveToFirst();
    do {
        ph_number=cursor_object.getString(0);
        call_type=cursor_object.getString(1);
        call_date=cursor_object.getString(2);
        call_duration=cursor_object.getString(3);
        sb.append("\nPhone Number:--- " + ph_number +
                " \nCall Type:--- " + call_type +
                " \nCall Date:--- " + call_date
                + " \nCall duration in sec :--- " + call_duration);
        sb.append("\n----------------------------------");

    } while(cursor_object.moveToNext());
    cursor_object.close(); // just added
    return sb;
}

}

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

StaleDataException:尝试在关闭游标后访问它 的相关文章

  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • Android - 从资产中解析巨大(超大)JSON 文件的最佳方法

    我正在尝试从资产文件夹中解析一些巨大的 JSON 文件 我如何加载并添加到 RecyclerView 我想知道解析这种大文件 大约 6MB 的最佳方法是什么 以及您是否知道可以帮助我处理此文件的良好 API 我建议您使用GSON lib h
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 尝试将相机切换回前面但出现异常

    尝试将相机切换回前面 但出现异常 找不到 问题请检查并帮助 error 01 27 11 49 00 376 E AndroidRuntime 30767 java lang RuntimeException Unable to start
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 在两个活动之间传输数据[重复]

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

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • iphone sqlite 静态链接?

    有人静态链接 sqlite 而不是使用动态链接 吗 我遇到的问题是 越狱手机的用户没有与普通 iPhone 所采用的 sqlite 版本相同的版本 因此导致崩溃 我假设在我的应用程序中静态链接已知版本的 sqlite 就是答案 我需要全文支
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1

随机推荐

  • 根据用户输入在 Laravel 中创建新表?

    我正在尝试根据 Laravel 框架中的用户输入创建新的 mysql 表 用户提交一个在控制器中处理的表单 保存表单数据 然后根据用户的输入创建一个新表 以便稍后接收数据 在 Laravel 中 可以使用 schema create 创建表
  • 使用 unique_ptr 的 value_type 构造 unordered_map

    这段代码似乎不起作用 因为唯一的指针被存储到一个pair对象中 然后尝试从中复制 这可以避免吗 std unordered map
  • OpenGL C++ 鼠标光线拾取 glm:unproject

    我目前正在开发 C 游戏引擎 我想在应用程序中构建鼠标交互 我之前通过光线拾取完成了此操作 但当时我使用了固定的鼠标位置 现在我想不使用它 我读到您可以使用 glm unProject 函数来执行此操作 但我的函数不起作用 该函数给出的坐标
  • 分页:找出项目所在的页面(给定主键和排序顺序)

    假设我像这样进行分页 SELECT article id article content FROM articles ORDER BY article rating OFFSET page 1 items per page LIMIT it
  • git push origin 和 git push origin master 有什么区别

    将本地 git 存储库的 master 分支推送到名为 origin 的远程存储库的 master 分支有什么区别吗 git push origin master或与git push origin 默认动作为git push and git
  • Go中如何使用剪贴板?

    如何使用 Go 复制到剪贴板或从中获取数据 我有点担心有文档中没有结果 http golang org search q clipboard and 谷歌给了我这个结果 https groups google com forum msg g
  • OpenGL alpha 测试 - 如何替换已弃用的 AlphaFunc?

    我正在尝试用 Alpha 绘制球体 但我的 Z 缓冲区有问题 有些像素是透明的 但会写入 Zbuffer 因此后面的不透明像素会被隐藏 这是我的设置 gl Enable gl DEPTH TEST gl DepthFunc gl LEQUA
  • 哪些 Java 库可用于生成 KML? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何正确计算两个日期之间的实际月份数?

    我已经按照方法getDiffDateMap计算两个日期之间的差异并返回Map分别表示毫秒 秒 分钟 小时 天 月和年的整数 public static Map
  • 业务逻辑是主观的吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Visual Studio 2013 和 Intel Fortran 编译混合 C++/C 代码

    我正在尝试编译一个简单的 C Fortran 混合程序 但存在链接问题 我使用的是Visual Studio 2013 Ultimate和Intel Visual Fortran Compiler XE 14 该程序非常简单 是从网上的某个
  • 我正在制作 PEMDAS 求解器,但不知道该写什么

    我正在尝试做一个PEMDAS https en wikipedia org wiki Order of operations用户输入 PEMDAS 问题的求解器 例如 他们输入 4 4 2 5 程序就会为他们解答 是否有任何代码可以让 py
  • OnNewText 事件后何时重绘 VirtualTreeView?

    我使用此代码来填充 VirtualStringTree 并允许重命名项目 Structure for the tree struct TVSTdata UnicodeString Name Initialization o
  • 如何停止散景服务器?

    我确实使用散景来绘制本地 LAN 上的实时传感器数据 Bokeh 是使用 popen 从我的 python 应用程序中启动的 Popen bokeh serve host localhost 5006 host 192 168 8 100
  • V100 和 P100 在 Google Compute Engine 上的可用性

    描述 我刚刚尝试了一段时间 使用我的个人帐户设置或保留用于机器学习的虚拟机 我在 n1 上使用了几个月 具有大约 8 GB 或更多 GB RAM 以及用于机器学习的 P100 或 V100 现在尝试了至少一半具有 P100 V100 可用性
  • 使用 bash 添加文件扩展名

    使用 bash 将文件扩展名 jpg 添加到无扩展名文件的好方法是什么 Strip jpg from all filenames for f in jpg do mv f f jpg done Add jpg to all filename
  • 这个符号在 php 中的对象或空值中意味着什么[重复]

    这个问题在这里已经有答案了 您能解释一下运营商做什么吗 gt 在 PHP 中做 因为我有这段代码 drive objDrive gt func gt getDriver gt value 目前只是一个提案 你可以去找找在此输入链接描述 ht
  • 在 Docker 容器中运行数据库的性能问题

    有没有人注意到在 docker 容器中运行数据库 MySQL 或 Postgres 有任何性能问题 我被告知会发生严重的性能下降 请指教 Docker 本身带来的开销非常小 它只是将进程与主机上的其他进程隔离 但是 您可以采取多种措施来降低
  • Dask“没有名为 xxxx 的模块”错误

    使用dask分布式我尝试提交一个位于另一个名为worker py的文件中的函数 在工人中我有以下错误 没有名为 worker 的模块 但是我无法弄清楚我在这里做错了什么 这是我的代码示例 import worker def run self
  • StaleDataException:尝试在关闭游标后访问它

    FATAL EXCEPTION main Process com example lenovo phone PID 4885 android database StaleDataException Attempted to access a