【问题标题】:Android application keeps crashing and I can't figure out why. Something with java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 [duplicate]Android应用程序不断崩溃,我不知道为什么。 java.lang.IndexOutOfBoundsException:索引:0,大小:0 [重复]
【发布时间】:2020-12-21 18:05:43
【问题描述】:

我正在使用具有以下方法的 DBHelper 类

    public List<List<String>> getReservations (String username) {
        List<List<String>> reservations = new ArrayList<List<String>>();
        List<String> row = new ArrayList();
        SQLiteDatabase database = this.getReadableDatabase();
        Cursor c1 = database.rawQuery("SELECT * FROM Reservations WHERE username LIKE '" + username + "'", null);
        while(c1.moveToNext()) {
            row.add(c1.getString(1)); //parkingname
            row.add(c1.getString(2)); //date
            row.add(c1.getString(3)); //time
            reservations.add(row);
            row.clear();
        }
        c1.close();
        return reservations;
    }

我的数据库已填充(100% 确定,其他方法有效)

db.execSQL("CREATE TABLE Reservations(username VARCHAR, parkingname VARCHAR, date VARCHAR, timeslot VARCHAR);");

现在每当我尝试

        List<List<String>> values = database.getReservations(username);
        text = (TextView) findViewById(R.id.myreservations);
        if(!values.isEmpty()) {
            String b = String.valueOf(values.size());
            List<String> lista = values.get(0); //crashes here
            String a = lista.get(0);
            text.setText(b + a);
        }

应用程序崩溃

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myparking/com.example.myparking.MyReservations}: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

【问题讨论】:

    标签: java android list sqlite


    【解决方案1】:

    您需要在游标循环内创建行。当您调用 reservations.add(row) 时,您的行对象不会被复制到预留中,并且当您调用 row.clear() 时 - 行和预留中的列表都会被清除。

        public List<List<String>> getReservations (String username) {
            List<List<String>> reservations = new ArrayList<List<String>>();
            SQLiteDatabase database = this.getReadableDatabase();
            Cursor c1 = database.rawQuery("SELECT * FROM Reservations WHERE username LIKE '" + username + "'", null);
            while(c1.moveToNext()) {
                List<String> row = new ArrayList();
                row.add(c1.getString(1)); //parkingname
                row.add(c1.getString(2)); //date
                row.add(c1.getString(3)); //time
                reservations.add(row);
            }
            c1.close();
            return reservations;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多