Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在从中访问数据之前初始化SQLite游标_Android_Sqlite_Android Cursoradapter - Fatal编程技术网

Android 在从中访问数据之前初始化SQLite游标

Android 在从中访问数据之前初始化SQLite游标,android,sqlite,android-cursoradapter,Android,Sqlite,Android Cursoradapter,我试图在通过FCM收到通知后将数据插入SQLite数据库。出于调试目的,当在主屏幕活动上单击SHow Token时,我还将向我的DB中插入一个虚拟数据 然而,我得到 “我正在获取”无法从游标窗口读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化。“ 链接到我的代码:- 请有人检查一下我的代码,告诉我哪里出了问题 注意-我在HomeScreen.java、MyFirebaseMessagingService.java和NotificationDetails.java中添加了以下内容 私

我试图在通过FCM收到通知后将数据插入SQLite数据库。出于调试目的,当在主屏幕活动上单击SHow Token时,我还将向我的DB中插入一个虚拟数据

然而,我得到

“我正在获取”无法从游标窗口读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化。“

链接到我的代码:-

请有人检查一下我的代码,告诉我哪里出了问题

注意-我在HomeScreen.java、MyFirebaseMessagingService.java和NotificationDetails.java中添加了以下内容

私有SQLiteDB dbHelper=新SQLiteDB(this);
自建议的
私有SQLiteDB dbHelper;
没有为我工作

当我在上面使用时,我一直在获取Nullpointer异常,因此我认为由于SQLiteDB类构造函数正在接受一个上下文,所以让我传递一个post,我没有获取Nullpointer异常

现在我在没有完全意识到上下文的概念的情况下做了这件事,我一直在绞尽脑汁,但是由于我是android的一个极端的noob,我现在还不能理解它。我怀疑这可能与我正在传递的上下文有关

有人能在这里帮助我详细说明如何解决这个问题吗?我已经通过了许多其他的线程,但无法解决这个问题,因此经过5个小时的多个SO问题,我发布了这个问题

提前感谢社区中所有人的帮助。:)

编辑 根据管理员的建议,我在下面添加了我的代码片段

我在哪里调用光标

在SQLiteDB.java中插入通知函数

getAllNotifications函数

无法从游标窗口读取第0行第1列。

表示您正试图从第0行(第一行)获取偏移量为-1的列。因此您提供了无效的偏移量(偏移量不能为-1,偏移量必须为0或更大,最大值将比光标中的列数少1)

最可能的原因是,当传递给方法的列在游标中找不到时,游标方法getColumnIndex(列名称作为字符串)将返回-1。注意,由于存在错误,列名区分大小写

因此,您的问题是光标不包含列名通知详细信息,并且由于您使用了*(所有列),因此该列在表中不存在

从外观上看,您应该使用字符串变量NOTIFICATION_DETAILS,因此您可能需要使用:-

token_text.setText("Token: " +rs.getString((rs.getColumnIndex(NOTIFICATION_DETAILS)))); //<<<<<<<<<< double quotation marks removed.
补充和重新评论:- 游标rs=dbHelper.getAllNotifications();rs.moveToFirst();do{for (int i=0;i 使用以下方法要简单得多:-

Cursor rs = dbHelper.getAllNotifications();
while (rs.moveToNext()) {
    notification_array.add(rs.getString((rs.getColumnIndex(NOTIFICATION_DETAILS))));
}
无法从游标窗口读取第0行第1列。

表示您正试图从第0行(第一行)获取偏移量为-1的列。因此您提供了无效的偏移量(偏移量不能为-1,偏移量必须为0或更大,最大值将比光标中的列数少1)

最可能的原因是,当传递给方法的列在游标中找不到时,游标方法getColumnIndex(列名称作为字符串)将返回-1。注意,由于存在错误,列名区分大小写

因此,您的问题是光标不包含列名通知详细信息,并且由于您使用了*(所有列),因此该列在表中不存在

从外观上看,您应该使用字符串变量NOTIFICATION_DETAILS,因此您可能需要使用:-

token_text.setText("Token: " +rs.getString((rs.getColumnIndex(NOTIFICATION_DETAILS)))); //<<<<<<<<<< double quotation marks removed.
补充和重新评论:- 游标rs=dbHelper.getAllNotifications();rs.moveToFirst();do{for (int i=0;i 使用以下方法要简单得多:-

Cursor rs = dbHelper.getAllNotifications();
while (rs.moveToNext()) {
    notification_array.add(rs.getString((rs.getColumnIndex(NOTIFICATION_DETAILS))));
}

我收到“无法从游标窗口读取第0行第1列”。在从光标访问数据之前,请确保光标已正确初始化。请回答您的问题,而不是发布带有错误消息的注释。还要确保包含完整的代码示例。(注意:我们不是管理员。我们只是堆栈溢出的普通用户,愿意花时间回答问题。)在
moveToFirst()之后注销
rs.getCount()
的值。光标有行吗?没有getColumnCount()使用getCount()。您希望循环遍历行数,而不是行中的列数。使用
while(rs.moveToNext){….}
要简单得多无法从游标窗口读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化。请回答您的问题,而不是发布带有错误消息的注释。还要确保包含完整的代码示例。(注意:我们不是管理员。我们只是堆栈溢出的普通用户,愿意花时间回答问题。)在
moveToFirst()之后注销
rs.getCount()
的值。光标有行吗?没有getColumnCount()使用getCount()。您希望循环遍历行数,而不是行中的列数。使用
while(rs.moveToNext){….}
要简单得多
       dbHelper.insertNotification("This is a notification");
       //Check if the message contains data
       Cursor rs = dbHelper.getAllNotifications();
       if (rs.moveToFirst()) {
           token_text.setText("Token: " +rs.getString((rs.getColumnIndex(NOTIFICATION_DETAILS))));
       } else {
           ........ code here if anything need to be done if there are no rows extracted 
       }
Cursor rs = dbHelper.getAllNotifications();
while (rs.moveToNext()) {
    notification_array.add(rs.getString((rs.getColumnIndex(NOTIFICATION_DETAILS))));
}