1

I want save user's info in Internal Database. but when click on one user for show info, show me this error :

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

SQLiteOpenHelder code :

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 codes :

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;
    }

}

User Activity code :

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();
}

Log Cat error :

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) 

How can i fix it? tnx all <3

dfgh
  • 29
  • 7

1 Answers1

0

change your select method to this:

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;
}

then in your activity check that user exists or not

Hamid Reza
  • 624
  • 7
  • 23
  • kheyli mamnoon Mohandes, vali alan nemidoonam chera too safeii ke bayad etelaat ro neshoon bede, NO_USER ro neshoon mide! midoonid moshkel az kojas? – dfgh Feb 13 '16 at 12:07
  • khj, bale chon user ba un id k dari select mizani vujud nadare – Hamid Reza Feb 13 '16 at 14:03
  • mishe bizahmat ba tavajoh be code haye man begin moshkel kojast? kheyli mamnoonetoon misham – dfgh Feb 13 '16 at 14:13
  • bbin azizam, vaghti select mikoni khurujie query rikhte mishe tu cursor, age query b data reside base (yani user dashte bashi ba un id) moshkeli pish nmiado return mishe, vali age cursor khali bashe un error 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 – Hamid Reza Feb 13 '16 at 21:14