gpt4 book ai didi

java - ANDROID 由 CursorWindow 的 : java. lang.IllegalStateException : Couldn't read row 0, col 0 引起

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:15 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com