- 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/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!