Проблема
Я считаю, что ваша проблема в том, что вы столкнетесь с ошибкой таблица не найдена , поскольку база данных не содержит таблиц. Тем не менее, вы перехватываете исключение и не предпринимаете никаких действий, так как приложение, похоже, не будет работать.
Если вы добавите
e.printStackTrace();
до return null
тогда в журнале будет что-то похожее: -
2020-01-10 11:32:17.856 E/SQLiteLog: (1) no such table: stations
2020-01-10 11:32:17.856 W/System.err: android.database.sqlite.SQLiteException: no such table: stations (code 1 SQLITE_ERROR): , while compiling: SELECT name FROM stations
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
2020-01-10 11:32:17.859 W/System.err: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1443)
2020-01-10 11:32:17.860 W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1382)
2020-01-10 11:32:17.860 W/System.err: at a.so59673151notable.DataBaseHelper.SelectAllData(DataBaseHelper.java:27)
2020-01-10 11:32:17.860 W/System.err: at a.so59673151notable.MainActivity.onCreate(MainActivity.java:14)
- Не рекомендуется перехватывать исключения SQLite, так как в общем случае это будут серьезные ошибки и это видно из вашего собственного опыта, сбивающего вас с толку, поскольку вы считаете, что проблема l ie в том, что массив не создается.
Исправление
Часть 1
Вы должны использовать метод onCreate класса DataBaseHelper для создания таблицы station .
например,
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_STATIONS + "(name TEXT);");
}
- конечно, это может быть не та схема, которая вам нужна, это просто пример. Вы можете wi sh сослаться на CREATE TABLE
Часть 2
По мере создания базы данных DataBaseHelper onCreate Метод не будет запущен, так как он запускается только при создании базы данных. Таким образом, вам нужно удалить базу данных. При разработке самых простых способов сделать это: -
- Удалить / Очистить данные приложения
- Удалить приложение
После чего вы можете затем снова запустите приложение.
Подробнее
Чтобы получить данные из базы данных, вам необходимо добавить данные в базу данных, поэтому вам нужно добавить метод в класс DataBaseHelper по строкам (опять же предполагается, что таблица basi c создана выше): -
public long insertStation(String name) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name",name);
return db.insert(TABLE_STATIONS,null,cv);
}
Вы можете sh прочитать insert
Затем вы можете в классе Test есть что-то вроде следующего: -
final DataBaseHelper myDb = new DataBaseHelper(this); //<<<<< EXISTING LINE
myDb.insertStation("MyFirstStation");
myDb.insertStation("MySecondStation");
final String [] myData = myDb.SelectAllData(); //<<<<< EXISTING LINE
- Обратите внимание, что это только для тестирования, оно будет добавлять те же данные при каждом запуске приложения, поэтому для каждого прогона будет 2 дополнительных строки.
Тестирование
Вышеуказанные изменения были протестированы с использованием: -
final DataBaseHelper myDb = new DataBaseHelper(this);
myDb.insertStation("MyFirstStation");
myDb.insertStation("MySecondStation");
final String [] myData = myDb.SelectAllData();
for (String s: myData) {
Log.d("STATIONINFO","Station Name is " + s);
}
Это приводит к (для первый запуск после установки приложения): -
2020-01-10 11:49:42.321 D/STATIONINFO: Station Name is MyFirstStation
2020-01-10 11:49:42.321 D/STATIONINFO: Station Name is MySecondStation