Форум программистов, компьютерный форум CyberForum.ru

База SQLite: метод по созданию таблицы не вызывается - Android

Восстановить пароль Регистрация
 
 
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
15.02.2016, 15:45     База SQLite: метод по созданию таблицы не вызывается #1
Не пойму что не так.
Раньше с ним не работал
Пытался реализовать пример из сети, но что то не хочет, подозреваю что не создана сама база, а точнее что не вызывается метод по созданию.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class NewDB extends Activity {
 
    final String LOG_TAG = "myLogs";
 
    DBHelper dbHelper;
 
    public void Insert(String text, String title) {
 
        dbHelper = new DBHelper(this);
 
        // создаем объект для данных
        ContentValues cv = new ContentValues();
 
        // подключаемся к БД
        SQLiteDatabase db = dbHelper.getWritableDatabase();
 
        Log.d(LOG_TAG, "--- Insert in mytable: ---");
        // подготовим данные для вставки в виде пар: наименование столбца - значение
 
        cv.put("name", text);
        cv.put("email", title);
        // вставляем запись и получаем ее ID
        long rowID = db.insert("mytable", null, cv);
        Log.d(LOG_TAG, "row inserted, ID = " + rowID);
 
        // закрываем подключение к БД
        dbHelper.close();
 
    }
 
    class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context) {
            // конструктор суперкласса
            super(context, "myDB", null, 1);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.d(LOG_TAG, "--- onCreate database ---");
            // создаем таблицу с полями
            db.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "name text,"
                    + "email text" + ");");
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
        }
    }
 
}
ошибки
User-space exception detected!
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

FATAL EXCEPTION: main
java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 17:31     База SQLite: метод по созданию таблицы не вызывается #21
Цитата Сообщение от Паблито Посмотреть сообщение
и что мне дает этот текст ? INTEGER PRIMARY KEY AUTOINCREMENT
там даже не указано имя
Ну в коде не целиком строка, потому вырвал кусок с параметрами колонки ид. Имя у нее user_id.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 17:31     База SQLite: метод по созданию таблицы не вызывается #22
Из реального кода скопировал - вполне работает.
Ты по русски понимаешь? SimpleCursorAdapter!
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
// открываем подключение к БД
        private DbConnections db;
        private SimpleCursorAdapter scAdapter;
        db = new DbConnections(this);
 
        String[] from = new String[]{AppData.DB_TBL_GLOSSARY_TITLE, AppData.DB_TBL_GLOSSARY_TEXT};
        int[] to = new int[]{R.id.listItemGlossaryTitle, R.id.listItemGlossaryText};
 
        scAdapter = new SimpleCursorAdapter(this, R.layout.list_item_glossary, null, from, to, 0);
        ListView listProduct = (ListView) findViewById(R.id.listViewGlossary);
 
        scAdapter.setViewBinder(new WineViewBinder());
        listProduct.setAdapter(scAdapter);
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 17:33     База SQLite: метод по созданию таблицы не вызывается #23
xaat, ооо вон оно как, понимаю, как-то не заметил. Ну тогда вопрос снят, этим адаптером не пользуюсь.
Паблито
15.02.2016, 17:34
  #24

Не по теме:

алилуя

xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 18:15     База SQLite: метод по созданию таблицы не вызывается #25
qdhtnsoyndtr,
Попробуй удалить приложение с устройства и установить заново.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
15.02.2016, 18:23     База SQLite: метод по созданию таблицы не вызывается #26
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
CoolMind, хотите не древний и не мохнатый?
http://www.fandroid.info/urok-34-rab...ite-v-android/
Это тут причём? Я изначально писал, что способ этот древний, основанный на багах Андроида. В современных условиях можно не эксплуатировать эту Гугловскую оплошность, а сразу писать так, как хочется - хоть id, хоть code. По крайней мере, в нехилой БД, которая у нас была, всё прекрасно работало.
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 19:00     База SQLite: метод по созданию таблицы не вызывается #27
Я изначально писал, что способ этот древний, основанный на багах Андроида.
Это не оплошность, а соглашение такое между разработчиками, стандарт... при чем здесь баги?
В современных условиях можно не эксплуатировать эту Гугловскую оплошность, а сразу писать так, как хочется - хоть id, хоть code.
Не, нельзя, все что написано, или ришется, хоть это курсор адаптеры, различные хэлперы, различные ORMы все использует _id, ну так принято.
По крайней мере, в нехилой БД, которая у нас была, всё прекрасно работало.
Ну будет работать кто спорит? ...пока не понадобится ormlite приделать или адаптер чужой, тогда не будет работать. Как вы кстати, данные из базы данных отображаете в Активити без курсор адаптера, какой то свой велосипед изобрели? Из курсора складываем в List?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
16.02.2016, 09:48     База SQLite: метод по созданию таблицы не вызывается #28
Цитата Сообщение от xaat Посмотреть сообщение
Из курсора складываем в List?
Можно и так, можно просто курсор отправить в кастомный адаптер. Зачем нужны эти ограничения стандартного адаптера?
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
16.02.2016, 18:01     База SQLite: метод по созданию таблицы не вызывается #29
Цитата Сообщение от xaat Посмотреть сообщение
Это не оплошность, а соглашение такое между разработчиками, стандарт... при чем здесь баги?
Я не уверен, что это стандарт. Да, видел такое соглашение, но на нём не делается упора. Можно легко менять названия полей так, как удобно.
В одной из старых статей на "Хабре" видел, что без "_id" в старых версиях Андроида не работало. Вот потому и решил, что это баг.
Цитата Сообщение от xaat Посмотреть сообщение
Не, нельзя, все что написано, или ришется, хоть это курсор адаптеры, различные хэлперы, различные ORMы все использует _id, ну так принято.
У кого-то принято, но писать можно так, как захочешь. Не спорю, другие библиотеки могут использовать эти соглашения. Вы же в БД, допустим, Oracle не обязаны писать id в качестве поля? А уж в интерфейсе - так и подавно.
Цитата Сообщение от xaat Посмотреть сообщение
пока не понадобится ormlite приделать или адаптер чужой
Это мне неведомо, покамест не приходилось использовать чужой адаптер. Я обычно изучаю код, что там написано. Если есть такая необходимость, поменяю. Ну, пожалуй, это самый сильный аргумент за "_id".
Цитата Сообщение от xaat Посмотреть сообщение
Как вы кстати, данные из базы данных отображаете в Активити без курсор адаптера, какой то свой велосипед изобрели? Из курсора складываем в List?
Конечно, прописываю адаптер. Под каждый ListView свой.
Да, к ORM приглядываюсь, может быть, это заставит перейти на "_id".
Паблито
16.02.2016, 18:57
  #30

Не по теме:

то есть слив защитан?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2016, 13:39     База SQLite: метод по созданию таблицы не вызывается
Еще ссылки по теме:

Android SQLite Связаные таблицы
Android Запись данных в 2 таблицы SQLite
Android AutoCompleteTextView + база sqlite
Метод вызывается только после второго нажатия на кнопку Android
Android Подскажите - не вызывается метод в потоке

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
17.02.2016, 13:39     База SQLite: метод по созданию таблицы не вызывается #31
Цитата Сообщение от Паблито Посмотреть сообщение
то есть слив защитан?
Кому? Если тебе, то да.
Yandex
Объявления
17.02.2016, 13:39     База SQLite: метод по созданию таблицы не вызывается
Ответ Создать тему
Опции темы

Текущее время: 22:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru