Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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

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.database.CursorIndexOutOfBoundsException:请求索引10,大小为10_Android_Sqlite_Offset_Indexoutofboundsexception - Fatal编程技术网

android.database.CursorIndexOutOfBoundsException:请求索引10,大小为10

android.database.CursorIndexOutOfBoundsException:请求索引10,大小为10,android,sqlite,offset,indexoutofboundsexception,Android,Sqlite,Offset,Indexoutofboundsexception,我正在学习使用SQLite操作的android。以下代码导致出现游标IndexOutofBoundsException,但我不知道原因: for (int i = 0; i < cursor.getCount(); i++) { cursor.move(i); String username = cursor.getString(1); Log.i("username", username); } 您可以看到行计数为10,但在获取第5行时会抛出异常 完整代码为:

我正在学习使用SQLite操作的android。以下代码导致出现
游标IndexOutofBoundsException
,但我不知道原因:

for (int i = 0; i < cursor.getCount(); i++) {
    cursor.move(i);
    String username = cursor.getString(1);
    Log.i("username", username);
}
您可以看到行计数为10,但在获取第5行时会抛出异常

完整代码为:

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;

public class MyActivity extends Activity {

    private SQLiteDatabase db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        createTables();
        insertData();
        queryData();
    }


    private void queryData() {
        Cursor cursor = db.query("users", new String[]{"_id", "username", "password"}, null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            Log.i("row count: ", "" + cursor.getCount());
            for (int i = 0; i < cursor.getCount(); i++) {
                cursor.move(i);
                String username = cursor.getString(1);
                Log.i("username", username);
            }
        }
    }

    private void insertData() {
        for (int i = 0; i < 10; i++) {
            String sql = "insert into users(username, password) values('aaa_" + i + "','123_" + i + "')";
            db.execSQL(sql);
        }
    }

    private void createTables() {
        this.deleteDatabase("temp.db");
        db = this.openOrCreateDatabase("temp.db", MODE_PRIVATE, null);
        String sql = "create table users(_id integer primary key autoincrement, username text, password text)";
        db.execSQL(sql);
    }

}
导入android.app.Activity;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.os.Bundle;
导入android.util.Log;
公共类MyActivity扩展了活动{
专用数据库数据库;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createTables();
insertData();
queryData();
}
私有void queryData(){
Cursor Cursor=db.query(“用户”,新字符串[]{“\u id”,“用户名”,“密码”},null,null,null,null,null);
if(cursor.moveToFirst()){
Log.i(“行计数:”,“+cursor.getCount());
对于(int i=0;i
这是因为
移动(整数偏移)
执行以下操作:

将光标从当前位置向前或向后移动相对量

您不应该使用api。这是将位置移动一个偏移量。改用

Cursor.moveToPosition
试试这个

      cursor.moveToFirst();
    for (int i = 0; i < cursor.getCount(); i++) 
         {           
            String username = cursor.getString(1);
            Log.i("username", username);
            cursor.moveToNext() 
         }
cursor.moveToFirst();
对于(int i=0;i
或者根据你的代码

private void queryData() {
        Cursor cursor = db.query("users", new String[]{"_id", "username", "password"}, null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            Log.i("row count: ", "" + cursor.getCount());
            for (int i = 0; i < cursor.getCount(); i++) {                
                String username = cursor.getString(1);
                Log.i("username", username);
                cursor.moveToNext() 
            }
        }
    }
private void queryData(){
Cursor Cursor=db.query(“用户”,新字符串[]{“\u id”,“用户名”,“密码”},null,null,null,null,null);
if(cursor.moveToFirst()){
Log.i(“行计数:”,“+cursor.getCount());
对于(inti=0;i
使用do while循环而不是for循环

if (cursor.getCount() != 0) 
{
    if (cursor.moveToFirst()) 
    {
        do 
        {
             // cursor.getString(cursor.getColumnIndex("username")));               
        } while (cursor.moveToNext());
    }
}

无需执行cursor.moveToFirst();只需用cursor.moveToNext()将整个内容包装起来;
if (cursor.getCount() != 0) 
{
    if (cursor.moveToFirst()) 
    {
        do 
        {
             // cursor.getString(cursor.getColumnIndex("username")));               
        } while (cursor.moveToNext());
    }
}