Java android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0,但之前为完全相同的代码工作
整个项目最初使用的是完全相同的代码,我甚至将其还原回一个时间段,在该时间段中,它没有显示android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0。我诚恳地寻求帮助来解决这个问题,因为我知道它相当简单,因为它是关于游标的,但我仍然无法掌握它的窍门 相关代码如下: DatabaseOperations.java 包m.rami.psuJava android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0,但之前为完全相同的代码工作,java,android,sqlite,Java,Android,Sqlite,整个项目最初使用的是完全相同的代码,我甚至将其还原回一个时间段,在该时间段中,它没有显示android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0。我诚恳地寻求帮助来解决这个问题,因为我知道它相当简单,因为它是关于游标的,但我仍然无法掌握它的窍门 相关代码如下: DatabaseOperations.java 包m.rami.psu import android.content.ContentValues; import android
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 DatabaseOperations extends SQLiteOpenHelper {
public static final int database_version = 3;
public String CREATE_QUERY = "CREATE TABLE
"+TableData.TableInfo.TABLE_NAME+"("+TableData.TableInfo.USER_NAME+"
TEXT,"+TableData.TableInfo.USER_PASSWORD+" TEXT );";
public DatabaseOperations(Context context) {
super(context, TableData.TableInfo.DATABASE_NAME, null,
database_version);
Log.d("Database operations", "Database created");
// constructor stub
}
@Override
public void onCreate(SQLiteDatabase sdb) {
sdb.execSQL(CREATE_QUERY);
Log.d("Database operations","Table created");
// method stub
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// method stub
}
public void putInformation(DatabaseOperations dop, String name, String pass)
{
SQLiteDatabase SQ = dop.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(TableData.TableInfo.USER_NAME, name);
cv.put(TableData.TableInfo.USER_PASSWORD, pass);
long k = SQ.insert(TableData.TableInfo.TABLE_NAME, null,cv);
Log.d("Database operations", "One raw inserted");
// inserts data into database
}
public Cursor getInformation(DatabaseOperations dop){
SQLiteDatabase SQ = dop.getReadableDatabase();
String[] columns = {TableData.TableInfo.USER_NAME,
TableData.TableInfo.USER_PASSWORD};
Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME ,columns, null,
null, null, null, null);
return CR;
}
}
import android.provider.BaseColumns;
public class TableData {
public TableData(){
}
public static abstract class TableInfo implements BaseColumns {
public static final String USER_NAME = "user_name";
public static final String USER_PASSWORD = "user_password";
public static final String DATABASE_NAME = "user_info";
public static final String TABLE_NAME = "reg_table";
}
}
Home.java
login.java
TableData.java
包m.rami.psu
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 DatabaseOperations extends SQLiteOpenHelper {
public static final int database_version = 3;
public String CREATE_QUERY = "CREATE TABLE
"+TableData.TableInfo.TABLE_NAME+"("+TableData.TableInfo.USER_NAME+"
TEXT,"+TableData.TableInfo.USER_PASSWORD+" TEXT );";
public DatabaseOperations(Context context) {
super(context, TableData.TableInfo.DATABASE_NAME, null,
database_version);
Log.d("Database operations", "Database created");
// constructor stub
}
@Override
public void onCreate(SQLiteDatabase sdb) {
sdb.execSQL(CREATE_QUERY);
Log.d("Database operations","Table created");
// method stub
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// method stub
}
public void putInformation(DatabaseOperations dop, String name, String pass)
{
SQLiteDatabase SQ = dop.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(TableData.TableInfo.USER_NAME, name);
cv.put(TableData.TableInfo.USER_PASSWORD, pass);
long k = SQ.insert(TableData.TableInfo.TABLE_NAME, null,cv);
Log.d("Database operations", "One raw inserted");
// inserts data into database
}
public Cursor getInformation(DatabaseOperations dop){
SQLiteDatabase SQ = dop.getReadableDatabase();
String[] columns = {TableData.TableInfo.USER_NAME,
TableData.TableInfo.USER_PASSWORD};
Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME ,columns, null,
null, null, null, null);
return CR;
}
}
import android.provider.BaseColumns;
public class TableData {
public TableData(){
}
public static abstract class TableInfo implements BaseColumns {
public static final String USER_NAME = "user_name";
public static final String USER_PASSWORD = "user_password";
public static final String DATABASE_NAME = "user_info";
public static final String TABLE_NAME = "reg_table";
}
}
错误屏幕
反转do/while,因为即使条件一开始为false,它也会执行
while(CR.moveToNext()) {
if(username.equals(CR.getString(0))
&& (userpass.equals(CR.getString(1)))) {
loginstatus = true;
NAME = CR.getString(0);
}
}
或者更好:由于moveToFirst返回一个布尔值,这意味着要获取数据,所以您只需对照它进行检查:
if(CR.moveToFirst())
while(CR.moveToNext()){
//do thing with data
您的表创建代码有一些问题。 试试这组代码
db.execSQL("CREATE TABLE IF NOT EXISTS " + purpose_of_loan_tb + " (" + pk_id + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ purpose_of_loan_id + " INTEGER , " + user_id + " INTEGER, " + purpose_of_loan_status + " INTEGER, " +
purpose_of_loan_json + " TEXT);");
插入代码:
public long insertRows(SQLiteDatabase db, String tableName, ContentValues contentValues) {
long n = db.insert(tableName, null, contentValues);
Util.printMessage(TAG, "Row inserted in " + tableName + " : " + n);
return n;
}
通过根据列名和相应的值将值放入内容值键中来调用此方法
就你而言:
contentValues.put("TableData.TableInfo.USER_NAME","ABCD");
要检索所有数据,可以使用此方法:
public Cursor getValueByColumn(SQLiteDatabase db, String table_name,
String select_clause_colunms, String where_clause_column) {
Cursor cursor = db
.query(table_name, null, null, null, null, null, null);
// print("Count " + cursor.getCount());
return cursor;
}
这将返回光标,您可以在其中检查光标计数。非常感谢您,这真的很有帮助!太好了,如果这对你有帮助,如果这篇文章对你有帮助,请把它标记为答案。谢谢你,马科斯!
public Cursor getValueByColumn(SQLiteDatabase db, String table_name,
String select_clause_colunms, String where_clause_column) {
Cursor cursor = db
.query(table_name, null, null, null, null, null, null);
// print("Count " + cursor.getCount());
return cursor;
}