- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 Android 开发新手,我在代码中找不到任何错误,但这总是显示在我的 logcat 中
我收到这个错误
04-08 21:22:52.448 27585-27585/app.fingervoiz.com.tamla E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.fingervoiz.com.tamla, PID: 27585
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.fingervoiz.com.tamla/app.fingervoiz.com.tamla.FingerPrintList}: java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2608)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetLong(Native Method)
at android.database.CursorWindow.getLong(CursorWindow.java:511)
at android.database.CursorWindow.getInt(CursorWindow.java:578)
at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84)
at app.fingervoiz.com.tamla.TamlaDBHelper.getAllFingerPrint(TamlaDBHelper.java:129)
at app.fingervoiz.com.tamla.FingerPrintList.onCreate(FingerPrintList.java:35)
at android.app.Activity.performCreate(Activity.java:6092)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2608)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
这是我的代码
package app.fingervoiz.com.tamla;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
/**
* Created by MEIHEART on 4/4/2016.
*/
public class TamlaDBHelper extends SQLiteOpenHelper{
//DataBase
private static final String DATABASE_NAME = "TamlaDB";
private static final String DATABASE_TABLE_1 = "Users";
private static final String DATABASE_TABLE_2 = "FingerPrintDataset";
private static final int DATABASE_VERSION = 1;
//Users Table
public static final String KEY_ROW_ID = "Users_Id";
public static final String KEY_ROW_NAME_1 = "firstName";
public static final String KEY_ROW_NAME_2 = "middleName";
public static final String KEY_ROW_NAME_3 = "lastName";
public static final String KEY_ROW_AGE = "user_age";
public static final String KEY_ROW_JOB_POSITION = "user_position";
public static final String KEY_ROW_WORK_STATION = "user_station";
public static final String KEY_ROW_EMAIL_ADDRESS = "user_email";
public static final String KEY_ROW_USERNAME = "usrName";
public static final String KEY_ROW_PASSWORD = "passWrd";
public static final String KEY_ROW_DEFAULT_PICTURE = "DPicture";
//FINGERPRINT Dataset Table
public static final String KEY_ROW_FPD_ID = "FPDs_Id"; //0
public static final String KEY_ROW_FPD_NAME = "FPDs_fullname"; //1
public static final String KEY_ROW_FPD_AGE = "FPDs_Age"; //2
public static final String KEY_ROW_FPD_GENDER = "FPDs_Gender"; //3
public static final String KEY_ROW_FPD_ADDRESS = "FPDs_Address"; //4
public static final String KEY_ROW_FPD_FINGERPRINT_1 = "FPDs_Fingerprint1"; //5
public static final String KEY_ROW_FPD_FINGERPRINT_2 = "FPDs_Fingerprint2"; //6
public static final String KEY_ROW_FPD_FINGERPRINT_3 = "FPDs_Fingerprint3"; //7
public static final String KEY_ROW_FPD_FINGERPRINT_4 = "FPDs_Fingerprint4"; //8
public static final String KEY_ROW_FPD_FINGERPRINT_5 = "FPDs_Fingerprint5"; //9
public static final String KEY_ROW_FPD_FINGERPRINT_6 = "FPDs_Fingerprint6"; //10
public static final String KEY_ROW_FPD_FINGERPRINT_7 = "FPDs_Fingerprint7"; //11
public static final String KEY_ROW_FPD_FINGERPRINT_8 = "FPDs_Fingerprint8"; //12
public static final String KEY_ROW_FPD_FINGERPRINT_9 = "FPDs_Fingerprint9"; //13
public static final String KEY_ROW_FPD_FINGERPRINT_10 = "FPDs_Fingerprint10"; //14
public static final String KEY_ROW_FPD_DEFAULT_PICTURE = "DPicture"; //15
public TamlaDBHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + DATABASE_TABLE_1 + " (" + KEY_ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + KEY_ROW_NAME_1 + " TEXT, " + KEY_ROW_NAME_2 + " TEXT, " + KEY_ROW_NAME_3 + " TEXT, " + KEY_ROW_AGE + " INTEGER, " + KEY_ROW_JOB_POSITION + " TEXT, " + KEY_ROW_WORK_STATION + " TEXT, " + KEY_ROW_EMAIL_ADDRESS + " TEXT, " + KEY_ROW_USERNAME + " TEXT, " + KEY_ROW_PASSWORD + " TEXT, " + KEY_ROW_DEFAULT_PICTURE + " BLOB);");
db.execSQL("CREATE TABLE " + DATABASE_TABLE_2 + " (" + KEY_ROW_FPD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + KEY_ROW_FPD_NAME + " TEXT, " + KEY_ROW_FPD_AGE + " INTEGER, " + KEY_ROW_FPD_GENDER + " TEXT, " + KEY_ROW_FPD_ADDRESS + " TEXT, " + KEY_ROW_FPD_FINGERPRINT_1 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_2 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_3 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_4 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_5 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_6 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_7 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_8 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_9 + " BLOB, " + KEY_ROW_FPD_FINGERPRINT_10 + " BLOB, " + KEY_ROW_FPD_DEFAULT_PICTURE + " BLOB);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE_1 + " AND " + DATABASE_TABLE_2);
onCreate(db);
}
public // Public Insert new User
void addFingerPrint(FingerPrint fingerPrint){
SQLiteDatabase ourDatabase = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ROW_FPD_NAME, fingerPrint.fulname);
values.put(KEY_ROW_FPD_AGE, fingerPrint.age);
values.put(KEY_ROW_FPD_GENDER, fingerPrint.gender);
values.put(KEY_ROW_FPD_ADDRESS, fingerPrint.address);
values.put(KEY_ROW_FPD_FINGERPRINT_1, fingerPrint.fp1);
values.put(KEY_ROW_FPD_FINGERPRINT_2, fingerPrint.fp2);
values.put(KEY_ROW_FPD_FINGERPRINT_3, fingerPrint.fp3);
values.put(KEY_ROW_FPD_FINGERPRINT_4, fingerPrint.fp4);
values.put(KEY_ROW_FPD_FINGERPRINT_5, fingerPrint.fp5);
values.put(KEY_ROW_FPD_FINGERPRINT_6, fingerPrint.fp6);
values.put(KEY_ROW_FPD_FINGERPRINT_7, fingerPrint.fp7);
values.put(KEY_ROW_FPD_FINGERPRINT_8, fingerPrint.fp8);
values.put(KEY_ROW_FPD_FINGERPRINT_9, fingerPrint.fp9);
values.put(KEY_ROW_FPD_FINGERPRINT_10, fingerPrint.fp10);
values.put(KEY_ROW_FPD_DEFAULT_PICTURE, fingerPrint._dp);
ourDatabase.insert(DATABASE_TABLE_2, null, values);
ourDatabase.close();
}
FingerPrint getFingerPrint(int id){
SQLiteDatabase db = this.getWritableDatabase();
String[] columns = new String[]{KEY_ROW_FPD_ID,KEY_ROW_FPD_NAME,KEY_ROW_FPD_AGE,KEY_ROW_FPD_GENDER,KEY_ROW_FPD_ADDRESS,KEY_ROW_FPD_FINGERPRINT_1,KEY_ROW_FPD_FINGERPRINT_2,KEY_ROW_FPD_FINGERPRINT_3,KEY_ROW_FPD_FINGERPRINT_4,KEY_ROW_FPD_FINGERPRINT_5,KEY_ROW_FPD_FINGERPRINT_6,KEY_ROW_FPD_FINGERPRINT_7,KEY_ROW_FPD_FINGERPRINT_8,KEY_ROW_FPD_FINGERPRINT_9,KEY_ROW_FPD_FINGERPRINT_10,KEY_ROW_FPD_DEFAULT_PICTURE};
Cursor cursor = db.query(DATABASE_TABLE_2,columns,KEY_ROW_FPD_ID + "=?",new String[] { String.valueOf(id) },null,null,null,null);
if (cursor != null)
cursor.moveToFirst();
FingerPrint fp = new FingerPrint(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getBlob(5),cursor.getBlob(6),cursor.getBlob(7),cursor.getBlob(8),cursor.getBlob(9),cursor.getBlob(10),cursor.getBlob(11),cursor.getBlob(12),cursor.getBlob(13),cursor.getBlob(14),cursor.getBlob(15));
return fp;
}
// Getting All Contacts
public List<FingerPrint> getAllFingerPrint() {
List<FingerPrint> contactList = new ArrayList<FingerPrint>();
// Select All Query
String selectQuery = "SELECT * FROM " + DATABASE_TABLE_2;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
FingerPrint fps = new FingerPrint();
fps.setFpd_id(cursor.getInt(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_ID)));
fps.setFulname(cursor.getString(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_NAME)));
fps.setAge(cursor.getString(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_AGE)));
fps.setGender(cursor.getString(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_GENDER)));
fps.setAddress(cursor.getString(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_ADDRESS)));
fps.setFp1(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_1)));
fps.setFp2(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_2)));
fps.setFp3(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_3)));
fps.setFp4(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_4)));
fps.setFp5(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_5)));
fps.setFp6(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_6)));
fps.setFp7(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_7)));
fps.setFp8(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_8)));
fps.setFp9(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_9)));
fps.setFp10(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_FINGERPRINT_10)));
fps.set_dp(cursor.getBlob(cursor.getColumnIndexOrThrow(KEY_ROW_FPD_DEFAULT_PICTURE)));
// Adding contact to list
contactList.add(fps);
}
// close inserting data from database
db.close();
// return contact list
return contactList;
}
// Deleting single contact
public void deleteFingerPrint(FingerPrint fingerPrint) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DATABASE_TABLE_2, KEY_ROW_FPD_ID + " = ?",
new String[]{String.valueOf(fingerPrint.get_id())});
db.close();
}
// Updating single contact
public int updateFingerPrint(FingerPrint fingerPrint) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ROW_FPD_NAME, fingerPrint.fulname);
values.put(KEY_ROW_FPD_AGE, fingerPrint.age);
values.put(KEY_ROW_FPD_GENDER, fingerPrint.gender);
values.put(KEY_ROW_FPD_ADDRESS, fingerPrint.address);
values.put(KEY_ROW_FPD_FINGERPRINT_1, fingerPrint.fp1);
values.put(KEY_ROW_FPD_FINGERPRINT_2, fingerPrint.fp2);
values.put(KEY_ROW_FPD_FINGERPRINT_3, fingerPrint.fp3);
values.put(KEY_ROW_FPD_FINGERPRINT_4, fingerPrint.fp4);
values.put(KEY_ROW_FPD_FINGERPRINT_5, fingerPrint.fp5);
values.put(KEY_ROW_FPD_FINGERPRINT_6, fingerPrint.fp6);
values.put(KEY_ROW_FPD_FINGERPRINT_7, fingerPrint.fp7);
values.put(KEY_ROW_FPD_FINGERPRINT_8, fingerPrint.fp8);
values.put(KEY_ROW_FPD_FINGERPRINT_9, fingerPrint.fp9);
values.put(KEY_ROW_FPD_FINGERPRINT_10, fingerPrint.fp10);
values.put(KEY_ROW_FPD_DEFAULT_PICTURE, fingerPrint._dp);
// updating row
return db.update(DATABASE_TABLE_2, values, KEY_ROW_FPD_ID + " = ?",
new String[] { String.valueOf(fingerPrint.get_id()) });
}
// Getting contacts Count
public int getFingerPrintCount() {
String countQuery = "SELECT * FROM " + DATABASE_TABLE_2;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int count = cursor.getCount();
cursor.close();
db.close();
// return count
return count;
}
}
请告诉我该怎么做,我在这里找不到任何答案,我尝试了很多不同的方法来解决这个问题,但无法解决我的问题
感谢回复
最佳答案
这应该是您的代码的正确模式:
if(cursor != null){
if(cursor.moveToFirst()){
do{
FingerPrint fps = new FingerPrint();
fps.setFulname(cursor.getString(cursor.getColumnIndex(KEY_ROW_FPD_NAME)));
fps.setAge(cursor.getInt(cursor.getColumnIndex(KEY_ROW_FPD_AGE)));
fps.setGender(cursor.getString(cursor.getColumnIndex(KEY_ROW_FPD_GENDER)));
fps.setAddress(cursor.getString(cursor.getColumnIndex(KEY_ROW_FPD_ADDRESS)));
// Adding contact to list
}while(cursor.moveToNext());
}
}
附注:如果do-while没有执行,那么你的光标是空的。即您的表为空或您的查询错误。
关于java - ANDROID 由 CursorWindow 的 : java. lang.IllegalStateException : Couldn't read row 0, col 0 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36500945/
首先我要说的是,我主要是一名 iOS 开发人员,最近才开始探索全栈开发的惊心动魄的冒险。我是 PHP 和 MySQL 的新手。话虽如此,我有一个问题,我希望需要一个直接的解决方案。 我正在为一个拥有预
我的表单上有 GridEx 对象并且... 我想用 for...next 循环在其中添加一些项目。实际上我找不到任何方法来添加带有自定义数据的新行。 我想在那个 GridEx 对象中选择一个特定的行。
我有以下数据框 df1 = DataFrame([['OBJ1', 10, 'BX', 'pool1', 'OBJ2'],['OBJ2', 0, '', '', 'OBJ1'],['OBJ3', 1
所以我有以下成员(member)历史表 User_ID | Start date | End Date | Type(0-7) | ---------------------------
我不擅长sql。我查看了 stackoverflow,但似乎对我没有任何用处。所以,我正在寻求帮助。是否可以根据行中的第一个字段将 2 行合并为 1 行。 我在 mysql 中执行此操作。我将展示示例
我了解 flex sm、md、lg 列的概念,但不了解应用于行的概念。弹性行有什么作用? sm、md、lg 尺寸应用于弹性行时意味着什么? 最佳答案 简答 - .row只是网格的容器 col .然而,
我遇到麻烦的地方 我相信我需要使用 COUNT;但是,我不知道如何将一行与同一列中的每一行进行比较,然后计算有多少行比相应行少/便宜。提前谢谢您! 这是我试图解决的官方问题: “使用示例架构,编写一条
我有以下 3 个相关表 Schools Departments Classes --------------- ------------------ --
我有代码: g, g_err = data[:, 4:6].T 我不知道[:, 4:6]的含义 尤其是第一个: .T 表示转置吗? 最佳答案 您有一个名为 data 的二维矩阵,您的代码从第一维获取所
我在行单击上附加了一个事件,在行内的复选框更改上附加了一个事件。 如何防止首先触发行单击? $(document).on('click', 'table tr', function() { con
我有一个场景,我需要连接两个 SQL 表并且正在为如何做而苦恼。假设在表 A 中我有这个: ColA ColB ColC ColD 45 55 17 45 45
我用谷歌表格记录我们俱乐部的出席率。该表格链接到另一个谷歌表格,因此可以自动创建一个名字列表,并按字母顺序排序。在这张表格中,我还根据我们所做的活动,在人的名字旁边手动输入点数。。问题是,由于姓名列表
这个问题在这里已经有了答案: What is a NullPointerException, and how do I fix it? (12 个回答) 5年前关闭。 编辑:我正在使用此代码读取 Ex
我是 R 的初学者。我希望你能帮助我解决我的问题。我的数据集中的文件名包含大量信息。我必须提取这些信息来创建单独的变量。 首先我使用 splits <- t(as.data.frame(strspli
假设我有一个 CSR 格式的矩阵,将一行(或多行)设置为零的最有效方法是什么? 下面的代码运行得很慢: A = A.tolil() A[indices, :] = 0 A = A.tocsr() 我不
我遇到了一个相当复杂的问题。我有一个包含三行的数据框:id、info 和 rownum。数据如下所示: id info row 1 a 1 1 b 2
我正在阅读learnjsdata.com并遇到了这种不熟悉的 JavaScript 语法。语法如下: lookupIndex[row[lookupKey]] = row; 有人知道这里发生了什么吗?我
我有一个表格,收集每周足球比赛的结果。 根据每场比赛的结果,我根据 ID 为玩家输入 3、1 或 0 分,具体取决于他们是赢、平还是输。 id Name A1 B1 C1 A2 B2
我有一个 mysql 表: 在表1中,我有3列:Bidang、Keahlian、Nilai。在 saran 列的表结果中,我想根据 bidang 组合 keahlian,但如果 nilai > 0,则
我有一个看起来像这样的表 | ID | item1 | item 2 | | 1 | A1 | B1 | | 2 | A2 |
我是一名优秀的程序员,十分优秀!