StringIndexOutOfBoundsException в android .database.sqlite.SQLiteOpenHelper.getDatabaseLocked - PullRequest
0 голосов
/ 17 апреля 2020

Я сделал много операций с базой данных Sqlite, и сейчас я создаю динамически файл db для другого пользователя, вошедшего в систему, и имя файла db принадлежит имени пользователя, вошедшего в систему. и используя файл базы данных в соответствии с их входом в систему.

Я получаю StringIndexOutOfBoundsException , когда пытаюсь получить новый экземпляр этого файла базы данных. например,

   DatabaseHelper dbHelper = DatabaseHelper.getInstance(this);
   dbHelper.methodOfDatabase();  // Throwing Exception 

Вот мой фрагмент кода класса DatabaseHelper

 public static String DATABASE_NAME = "";

 public DatabaseHelper(Context context, String dbNmae) {
        super(context, dbNmae, null, DATABASE_VERSION);
        this.myContext = context;
        DATABASE_NAME = dbNmae;
    }

А вот мой метод проверки или создания нового файла БД

 public String checkOrCreateDB(String dbName) {

        if (databaseFilesList.contains(dbName)) {
              DatabaseHelper.DATABASE_NAME = dbName;
        } else {
              DatabaseHelper.getNewDatabase(activity, dbName).getWritableDatabase();
              DatabaseHelper.DATABASE_NAME = dbName;
        }
        return DatabaseHelper.DATABASE_NAME;
     }

И, наконец, этот метод для создания нового файла базы данных.

 public static DatabaseHelper getNewDatabase(Context context, String dbName) {
        if(mInstance != null)
        {
            mInstance.close();
        }
        mInstance = new DatabaseHelper(context, dbName);
        return mInstance;
    }

Любая помощь будет оценена

1 Ответ

1 голос
/ 17 апреля 2020

Вы передаете пустую строку "" конструктору SQLiteOpenHelper. Код не показывает точно, откуда взялась пустая строка, но это объясняет, что этот cra sh.

getDatabaseLocked() вызывается, когда вы вызываете, например, getWritableDatabase(), и он проходит имя Context#getDatabasePath(), которое читает первый символ, не проверяя, существует ли вообще первый символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...