【问题标题】:How to fix Index 0 requested, with a size of 0 in Android如何修复请求的索引 0,在 Android 中大小为 0
【发布时间】:2016-02-13 11:36:36
【问题描述】:

我想将用户信息保存在Internal Database。但是当单击一个用户查看显示信息时,显示此错误:

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

SQLiteOpenHelder 代码:

public class dbOpenHelper extends SQLiteOpenHelper {

    public static final String dbName = "users";
    public static final String tblName = "user_info";
    public static final String cID = "id";
    public static final String cName = "name";
    public static final String cFamily = "family";
    public static final String cPassword = "password";
    public static final String cPhone = "phone";
    public static final String cEmail = "email";

    public static final String createDatabase = "CREATE TABLE " + tblName + "(" + cID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + cName + " TEXT,"
            + cFamily + " TEXT,"
            + cPassword + " TEXT,"
            + cPhone + " TEXT,"
            + cEmail + " TEXT);";

    public static final String dropDatabase = "DROP TABLE IF EXIST" + tblName;

    public dbOpenHelper(Context context) {
        super(context, dbName, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(createDatabase);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL(dropDatabase);
        onCreate(db);
    }
}

DbHandler 代码:

public class dbHandler {

    private dbOpenHelper dbHelper;
    private SQLiteDatabase database;

    public dbHandler(Context context) {

        dbHelper = new dbOpenHelper(context);
    }

    public void open() {

        database = dbHelper.getWritableDatabase();
    }

    public void close() {

        dbHelper.close();
    }

    public void insert(String name, String family, String password, String phone, String email) {

        ContentValues contentValues = new ContentValues();

        contentValues.put(dbHelper.cName, name);
        contentValues.put(dbHelper.cFamily, family);
        contentValues.put(dbHelper.cPassword, password);
        contentValues.put(dbHelper.cPhone, phone);
        contentValues.put(dbHelper.cEmail, email);

        database.insert(dbHelper.tblName, dbHelper.cName, contentValues);
    }

    public Boolean login(String username, String password) throws SQLException {

        Cursor cursor = database.rawQuery("SELECT * FROM " + dbHelper.tblName + " WHERE " + dbHelper.cName + "=? AND " +
                dbHelper.cPassword + "=?", new String[]{username, password});

        if (cursor != null) {
            if (cursor.getCount() > 0) {
                return true;
            }
        }

        return false;
    }

    public String show(int position, int field) {

        String order_sort_query = "SELECT * FROM " + dbHelper.tblName + " ORDER BY " + dbHelper.cID + " DESC";
        Cursor cursor = database.rawQuery(order_sort_query, null);
        cursor.moveToPosition(position);
        String user = cursor.getString(field);

        return user;
    }

    public String select_user(int position, int field) {

        String select_user_query = "SELECT * FROM " + dbHelper.tblName + " WHERE ID = " + position;
        Cursor cursor = database.rawQuery(select_user_query, null);
        cursor.moveToFirst();
        String user = cursor.getString(field);

        return user;
    }

    public Integer count(){

        Cursor cursor = database.query(dbHelper.tblName, null, null, null, null, null, null);
        int num_count = cursor.getCount();

        return num_count;
    }

}

用户活动代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.user_page);

    handler = new dbHandler(this);

    Bundle bundle = getIntent().getExtras();
    id = bundle.getInt("id_info");

    user_name_tv = (TextView) findViewById(R.id.user_info_name);
    user_family_tv = (TextView) findViewById(R.id.user_info_family);
    user_phone_tv = (TextView) findViewById(R.id.user_phone_text);
    user_email_tv = (TextView) findViewById(R.id.user_email_text);

    handler.open();
    user_name_tv.setText(handler.select_user(id, 1));
    user_family_tv.setText(handler.select_user(id, 2));
    user_phone_tv.setText(handler.select_user(id, 4));
    user_email_tv.setText(handler.select_user(id, 5));
    handler.close();
}

记录猫错误:

Process: com.tellfa.nikandroid.mytestdbproject, PID: 18753
                                                                                       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tellfa.nikandroid.mytestdbproject/com.tellfa.nikandroid.mytestdbproject.UserPage}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
                                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)
                                                                                           at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                           at android.os.Looper.loop(Looper.java:135)
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5349)
                                                                                           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:908)
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
                                                                                        Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                                                                                           at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
                                                                                           at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
                                                                                           at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
                                                                                           at com.tellfa.nikandroid.mytestdbproject.DataBase.dbHandler.select_user(dbHandler.java:75)
                                                                                           at com.tellfa.nikandroid.mytestdbproject.UserPage.onCreate(UserPage.java:33)
                                                                                           at android.app.Activity.performCreate(Activity.java:6020)
                                                                                           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284)
                                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 
                                                                                           at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                           at android.os.Looper.loop(Looper.java:135) 
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5349) 
                                                                                           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:908) 
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 

我该如何解决? tnx 全部

【问题讨论】:

    标签: android database android-database


    【解决方案1】:

    将您的选择方法更改为:

    public String select_user(int position, int field) {
    
        String user ="";
        String select_user_query = "SELECT * FROM " + dbHelper.tblName + " WHERE ID = " + position;
        Cursor cursor = database.rawQuery(select_user_query, null);
        if(cursor.moveToFirst()){
             user = cursor.getString(field);
        }else{
             user = "NO_USER";
        }
    
        return user;
    }
    

    然后在您的活动中检查用户是否存在

    【讨论】:

    • kheyli mamnoon Mohandes,vali alan nemidoonam chera too safeii ke bayad etelaat ro neshoon bede,NO_USER ro neshoon mide! midoonid moshkel az kojas?
    • khj,bale chon user ba un id k dari select mizani vujud nadare
    • mishe bizahmat ba tavajoh 是代码 haye man 开始 moshkel kojast? kheyli mamnoonetoon misham
    • bbin azizam,vaghti 选择 mikoni khurujie 查询 rikhte mishe tu 光标,年龄查询 b 数据驻留库(yani 用户 dashte bashi ba un id)moshkeli pish nmiado 返回 mishe,vali 年龄光标 khali bashe un 错误 bht neshun dade mishe moghe khundane cursoe, pas khyli rahat ba ye if sade va chek kardane inke tush chizi hast ya na in moshkel bar taraf mishe
    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2013-08-02
    • 2016-02-09
    • 2012-05-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多