无法从 CursorWindow 读取第 0 行第 9 列

2024-03-05

我收到错误无法从 CursorWindow 读取第 0 行,第 9 列。在访问游标中的数据之前,请确保游标已正确初始化。另外两个人能够毫无错误地运行代码,但在我的机器上它会抛出错误。我很困惑。下面是处理 SQLite 的代码: 提前致谢,抱歉有很多代码

import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class FeedSQLiteHelper extends SQLiteOpenHelper {

//Table Name
public static final String TABLE_POSTS = "comments";

//Table Column names
public static final String COLUMN_ID = "_id";
public static final String COLUMN_CAPTION = "caption";
public static final String COLUMN_NAME= "name";
public static final String COLUMN_LIKE="like";
public static final String COLUMN_DISLIKE="dislike";
public static final String COLUMN_COMMENTS = "columns";
public static final String COLUMN_ALL_COMMENTS = "allComments";
public static final String COLUMN_PHOTO = "photo";
public static final String COLUMN_CELEB = "celeb";
public static final String COLUMN_FID = "facebook_id";
public static final String COLUMN_TIME = "timestamp";

private static final String DATABASE_NAME = "commments.db";
private static final int DATABASE_VERSION = 6;

// Database creation sql statement
private static final String DATABASE_CREATE = "create table "
  + TABLE_POSTS + "(" + COLUMN_ID
  + " integer primary key autoincrement, " + COLUMN_CAPTION
  + " text not null, " + COLUMN_NAME + " text not null, " 
  + COLUMN_LIKE + " integer not null, " + COLUMN_DISLIKE + " integer not null, "
  + COLUMN_COMMENTS + " integer not null, " + COLUMN_ALL_COMMENTS + " text, " 
  + COLUMN_PHOTO + " text, " + COLUMN_FID + " text, " + COLUMN_TIME + " long);";

public FeedSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(FeedSQLiteHelper.class.getName(),
    "Upgrading database from version " + oldVersion + " to "
        + newVersion + ", which will destroy all old data");
if(oldVersion <6) {
    final String ALTER_TBL = "ALTER TABLE " + TABLE_POSTS + " ADD COLUMN " + COLUMN_TIME     + " long;";
    db.execSQL(ALTER_TBL);
}
}

//Adding new contact
public void addContact(FeedsModel contact) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(COLUMN_NAME, contact.getName());
values.put(COLUMN_CAPTION, contact.getDesc());
values.put(COLUMN_LIKE, contact.getUps());
values.put(COLUMN_DISLIKE, contact.getDowns());
values.put(COLUMN_COMMENTS, contact.getComments());
values.put(COLUMN_ALL_COMMENTS, contact.getAllComments());
values.put(COLUMN_PHOTO, contact.getImageId());
values.put(COLUMN_FID, contact.getFID());
values.put(COLUMN_TIME, contact.getTimestamp());

// Inserting Row
db.insert(TABLE_POSTS, null, values);
db.close(); // Closing database connection
}

//Getting single contact
public FeedsModel getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(TABLE_POSTS, new String[] { COLUMN_ID,
        COLUMN_CAPTION, COLUMN_NAME, COLUMN_LIKE, COLUMN_DISLIKE, COLUMN_COMMENTS,      COLUMN_ALL_COMMENTS, COLUMN_PHOTO, COLUMN_FID, COLUMN_TIME }, COLUMN_ID + "=?",
        new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
    cursor.moveToFirst();

FeedsModel contact = new FeedsModel(
        Integer.parseInt(cursor.getString(0)), 
        cursor.getString(1), 
        cursor.getString(2), 
        Integer.parseInt(cursor.getString(3)), 
        Integer.parseInt(cursor.getString(4)),
        Integer.parseInt(cursor.getString(5)),
        cursor.getString(6),
        cursor.getString(7),
        cursor.getString(8),
        Long.parseLong(cursor.getString(9)));

// return contact
return contact;
}

//filters the news feed for the 'Me' option
public List<FeedsModel> getMe(String me)
{
List<FeedsModel> contactList = new ArrayList<FeedsModel>();

String selectQuery = "SELECT * FROM " + TABLE_POSTS + " WHERE " + COLUMN_FID + "= "+ me;

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

// looping through all rows and adding to list
if (cursor.moveToFirst()) {
    do {
        FeedsModel contact = new FeedsModel();
        contact.setId(Integer.parseInt(cursor.getString(0)));
        contact.setDesc(cursor.getString(1));
        contact.setName(cursor.getString(2));
        contact.setUps(Integer.parseInt(cursor.getString(3)));
        contact.setDowns(Integer.parseInt(cursor.getString(4)));
        contact.setComments(Integer.parseInt(cursor.getString(5)));
        contact.setAllComments(cursor.getString(6));
        contact.setImageId(cursor.getString(7));
        contact.setFID(cursor.getString(8));
        contact.setTimestamp(Long.parseLong(cursor.getString(9)));
        // Adding contact to list
        contactList.add(contact);
    } while (cursor.moveToNext());
}

// return contact list
return contactList;
}

//filters the news feed for the 'Me' option
public List<FeedsModel> getMostRecent()
{
List<FeedsModel> contactList = new ArrayList<FeedsModel>();

String selectQuery = "SELECT * FROM " + TABLE_POSTS + " ORDER BY " + COLUMN_TIME + " DESC";

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

// looping through all rows and adding to list
if (cursor.moveToFirst()) {
  do {
      FeedsModel contact = new FeedsModel();
      contact.setId(Integer.parseInt(cursor.getString(0)));
      contact.setDesc(cursor.getString(1));
      contact.setName(cursor.getString(2));
      contact.setUps(Integer.parseInt(cursor.getString(3)));
      contact.setDowns(Integer.parseInt(cursor.getString(4)));
      contact.setComments(Integer.parseInt(cursor.getString(5)));
      contact.setAllComments(cursor.getString(6));
      contact.setImageId(cursor.getString(7));
      contact.setFID(cursor.getString(8));
      contact.setTimestamp(Long.parseLong(cursor.getString(9)));
      // Adding contact to list
      contactList.add(contact);
  } while (cursor.moveToNext());
}

// return contact list
return contactList;
}

//Getting All Contacts
public List<FeedsModel> getAllContacts() {

List<FeedsModel> contactList = new ArrayList<FeedsModel>();
// Select All Query
String selectQuery = "SELECT  * FROM " + TABLE_POSTS;

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

// looping through all rows and adding to list
if (cursor.moveToFirst()) {
    do {
        FeedsModel contact = new FeedsModel();
        contact.setId(Integer.parseInt(cursor.getString(0)));
        contact.setDesc(cursor.getString(1));
        contact.setName(cursor.getString(2));
        contact.setUps(Integer.parseInt(cursor.getString(3)));
        contact.setDowns(Integer.parseInt(cursor.getString(4)));
        contact.setComments(Integer.parseInt(cursor.getString(5)));
        contact.setAllComments(cursor.getString(6));
        contact.setImageId(cursor.getString(7));
        contact.setFID(cursor.getString(8));
        contact.setTimestamp(Long.parseLong(cursor.getString(9)));
        // Adding contact to list
        contactList.add(contact);
    } while (cursor.moveToNext());
}

// return contact list
return contactList;

}

//Getting contacts Count
public int getContactsCount() {

String countQuery = "SELECT  * FROM " + TABLE_POSTS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();

// return count
return cursor.getCount();

}
//Updating single contact
public int updateContact(FeedsModel contact) {

SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(COLUMN_NAME, contact.getName());
values.put(COLUMN_CAPTION, contact.getDesc());
values.put(COLUMN_LIKE, contact.getUps());
values.put(COLUMN_DISLIKE, contact.getDowns());
values.put(COLUMN_COMMENTS, contact.getComments());
values.put(COLUMN_ALL_COMMENTS, contact.getAllComments());
values.put(COLUMN_PHOTO, contact.getImageId());
values.put(COLUMN_FID, contact.getFID());
values.put(COLUMN_TIME, contact.getTimestamp());

// updating row
return db.update(TABLE_POSTS, values, COLUMN_ID + " = ?",
        new String[] { String.valueOf(contact.getId()) });

}

//Deleting single contact
public void deleteContact(FeedsModel contact) {

SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_POSTS, COLUMN_ID + " = ?",
        new String[] { String.valueOf(contact.getId()) });
db.close();

}

} 

Logcat:

E/CursorWindow(841): Failed to read row 0, column 9 from a CursorWindow which has 3 rows, 9 columns.
D/AndroidRuntime(841): Shutting down VM
W/dalvikvm(841): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
E/AndroidRuntime(841): FATAL EXCEPTION: main
E/AndroidRuntime(841): java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.Drake.doppelganger/edu.Drake.doppelganger.MainActivity}: java.lang.IllegalStateException: Couldn't read row 0, col 9 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
E/AndroidRuntime(841):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
E/AndroidRuntime(841):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(841):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(841):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(841):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(841):  at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(841):  at android.app.ActivityThread.main(ActivityThread.java:5041)
E/AndroidRuntime(841):  at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(841):  at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(841):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(841):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(841):  at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(841): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 9 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
E/AndroidRuntime(841):  at android.database.CursorWindow.nativeGetString(Native Method)
E/AndroidRuntime(841):  at android.database.CursorWindow.getString(CursorWindow.java:434)
E/AndroidRuntime(841):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
E/AndroidRuntime(841):  at edu.Drake.doppelganger.FeedSQLiteHelper.getAllContacts(FeedSQLiteHelper.java:198)
E/AndroidRuntime(841):  at edu.Drake.doppelganger.FeedFragment.onActivityCreated(FeedFragment.java:65)
E/AndroidRuntime(841):  at android.app.Fragment.performActivityCreated(Fragment.java:1703)
E/AndroidRuntime(841):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
E/AndroidRuntime(841):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
E/AndroidRuntime(841):  at android.app.BackStackRecord.run(BackStackRecord.java:682)
E/AndroidRuntime(841):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
E/AndroidRuntime(841):  at android.app.Activity.performStart(Activity.java:5113)
E/AndroidRuntime(841):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
E/AndroidRuntime(841):  ... 11 more

这是因为您在检查数据是否可用之前尝试获取数据。

if (cursor.moveToFirst()) {
    do {
        // your content
    } while (cursor.moveToNext());
}

将此块更改为

while (cursor.moveToNext()) {
        // your content
}

像这样。

这肯定会对你有帮助。

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

无法从 CursorWindow 读取第 0 行第 9 列 的相关文章

  • 如何通过循环变量在 dbt 中多次运行 SQL 模型?

    我有一个 dbt 模型 测试模型 接受地理变量 zip state region 在配置中 我想通过循环变量来运行模型三次 每次使用不同的变量运行它 问题是 我有一个如下所示的宏 它将变量附加到输出表名称的末尾 即运行测试模型 with z
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 更新plpgsql中触发器函数中的多列

    给出以下架构 create table account type a id SERIAL UNIQUE PRIMARY KEY some column VARCHAR create table account type b id SERIA
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 点击监听器的公共类

    我的所有 6 项活动中有 7 个按钮 所有 6 个按钮在所有活动中都具有相同的功能 如何为这 6 个按钮执行通用的单击事件侦听器 您可以创建一个实现 View OnClickListener 的新类 如下所示 public class My
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 如何在新标签 android webview 中打开链接? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经使用 webview 创建了一个 android 应用程序来显示我的网站 我什至想添加在新选项卡中打开链接的功能 但我找不到任何
  • 带有空白白屏的 WebView

    我在 DialogFragment 中有一个 webview 它使用以下方式显示文档和 PDF它可以进行几次尝试 但如果用户尝试频繁打开和关闭对话框 webview 将显示空白屏幕 我已经尝试了所有的线程link1 https stacko
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • Android:如何通过右侧的十字按钮清除EditText

    我创建了一个EditText用于搜索 左侧包含搜索图标 右侧包含图标
  • 累计非重复计数

    我正在查询每天获取 uid 的累计不同计数 示例 假设有 2 个 uid 100 200 出现在日期 2016 11 01 并且它们也在第二天出现 新的 uid 300 100 200 300 出现在 2016 11 02 此时我希望商店累
  • Android:获取最新意图

    如何获取发送到活动的最后一个意图 的文档onNewIntent 建议我需要做这样的事情 class MyActivity public void onNewIntent Intent intent setIntent intent reac
  • 绘制大位图时 nSyncAndDrawFrame 速度极慢

    我想用多个大位图优化视差滚动视图 在我的 Nexus 5 上 一切都很顺利 Traceview 转储如下所示 doFrame 方法大约需要 18 毫秒才能完成 但是 当使用我的 Nexus 7 或 Android 6 模拟器 Genymot

随机推荐

  • 如何在 PyQt5 中对 QProcess 进行排队?

    我想在 PyQt5 中对 QProcess 进行排队 或者只是阻塞 同时仍然使用 readAll 读取标准输出 相当于 subprocess call 而不是 subprocess Pop 当使用 waitForFinished 时 带有
  • 为什么会发生这种隐含的歧义行为?

    我有一个类型类Search 其中有一个实例Search A 如果我们有一个TypeClass1 A or a TypeClass2 A 实例 优先考虑1实例 编译如下 trait TypeClass1 A trait TypeClass2
  • 如何在一个 MVC 应用程序中组合 @DataJpaTest @SpringBootTest 来测试每一层?

    Here https stackoverflow com a 52968130 10894456 https stackoverflow com a 52968130 10894456很好地解释了为什么 DataJpaTest Spring
  • IBM Conversation API - 端点 URL 和参数应该是什么

    我尝试使用 Postman 工具访问 IBM 对话 但收到 404 未找到资源 错误 端点 https gateway watsonplatform net conversation api v1 workspaces 883c7704 0
  • 严格别名和指向联合字段的指针

    我有一个关于严格别名规则 联合和标准的问题 假设我们有以下代码 include
  • 清除网站的存储持久标志

    我正在使用navigator storage persist Chrome 上的 API 并已成功将其设置为true 但我希望 至少为了测试 能够清除设置放回false 据我所知 API 定义不包含需要清除的方法或标志 看https dev
  • 如何检测我是否在 next.js 中的客户端服务器上?

    我正在使用带有 Next js 的客户快递服务器 它在容器内运行 我正在做一个http请求isomorphic fetch获取我的渲染数据 我想做localhost当在服务器上运行时mysite com在客户端运行时 不确定实现此目的的最佳
  • 如何将 javascript 函数存储在队列中以便最终执行它们[重复]

    这个问题在这里已经有答案了 我在 javascript 中创建了一个 Queue 类 我想将函数作为数据存储在队列中 这样我就可以建立请求 函数调用 并在需要时响应它们 实际执行函数 有没有什么方法可以将函数存储为数据 有点类似于 setT
  • xmlserializer 未通过导入正确反序列化架构

    我一直在尝试使用从 xsd exe 中的架构生成的类来反序列化 C 中的 xml 文件 不幸的是 只有部分文件被正确反序列化 其余部分由于我无法解决的原因而返回为空 我的流程如下 从生成 C 代码的 myschema xsd 文件开始
  • PyEnv BUILD 在 MacOS 上安装 Python 失败

    尝试安装时Python 3 6 6 for Airflow using PyEnv on MacOS 我遇到构建失败与以下堆栈跟踪 File private var folders 6y kf699bqj2sgcgjshb20fr5zh00
  • 关于 AT&T x86 语法设计的问题

    谁能向我解释为什么 AT T 语法中的每个常量前面都有一个 为什么所有寄存器都有 这是否只是又一次试图让我做很多蹩脚的打字 另外 我是唯一一个发现 16 esp 相比之下确实违反直觉 esp 16 我知道它编译成同样的东西 但为什么有人想在
  • Docker 数据卷容器 - 我可以在 swarm 之间共享吗

    我知道如何使用 volumes from 创建数据卷容器并将其安装到多个其他容器 但我确实有一些关于它的用法和限制的问题 情况 我希望使用数据卷容器来为我的 Web 应用程序存储用户上传的图像 此数据卷容器将由运行 Web 前端的许多其他容
  • jQuery 检测点击禁用的提交按钮

    Fiddle http jsfiddle net ugzux http jsfiddle net ugzux 如您所见 我有一个带有禁用 通过 javascript 提交按钮的表单 无论如何 我希望能够将单击事件绑定到它 这样我就可以在允许
  • ARKitestimatedVerticalPlane命中测试获取平面旋转

    我正在使用 ARKit 在运行时检测墙壁 当触摸屏幕的某个点时 我使用 estimatedVerticalPlane 类型的命中测试 我正在尝试将 Y 旋转应用于与检测到的平面方向相对应的节点 我想计算旋转 private func com
  • VBA 将工作表保存到受密码保护的 PDF

    以下命令将活动表另存为 PDF ActiveSheet ExportAsFixedFormat Type xlTypePDF Filename C blahblah2 pdf Quality xlQualityStandard Ignore
  • 使用 Dancer 和 Postgres 的简单登录/授权系统

    作为 Perl 的新手 我正在努力寻找一种简单的方法来做到这一点 我在数据库中创建了一个非常简单的表 CREATE TABLE users id SERIAL NOT NULL PRIMARY KEY username TEXT NOT N
  • 如何在 Yii2 html::dropdownlist 中保留所选值?

    我认为有以下代码 and submit button 我的代码运行良好 但有一个大问题 我选择一个区域并单击搜索按钮 结果正确 当我单击下一页时 每页显示 10 个结果 它给了我
  • 如何在 WinDbg 中删除断点 ntdll!DbgBreakPoint+0x1

    我正在调试一个在将 WinDbg 设置为事后调试器时崩溃的程序 我在地址 77f7f571 设置了断点 当它被触发时 我常常得到以下信息 ERROR Symbol file could not be found Defaulted to e
  • 导入库 Oshi

    我想开发一个显示计算机信息的程序 我找到了一个名为 Oshi https github com oshi oshi 当我导入该库并运行我的代码时 出现异常 Exception in thread main java lang NoClass
  • 无法从 CursorWindow 读取第 0 行第 9 列

    我收到错误无法从 CursorWindow 读取第 0 行 第 9 列 在访问游标中的数据之前 请确保游标已正确初始化 另外两个人能够毫无错误地运行代码 但在我的机器上它会抛出错误 我很困惑 下面是处理 SQLite 的代码 提前致谢 抱歉