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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
#1

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

15.02.2016, 15:45. Просмотров 694. Ответов 30
Метки нет (Все метки)

Не пойму что не так.
Раньше с ним не работал
Пытался реализовать пример из сети, но что то не хочет, подозреваю что не создана сама база, а точнее что не вызывается метод по созданию.
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2016, 15:45     База SQLite: метод по созданию таблицы не вызывается
Посмотрите здесь:
Android База данных sqlite
Android AutoCompleteTextView + база sqlite
Android База данных SQLite
Android Подскажите - не вызывается метод в потоке
Не создается база данных SQLite Android
Android SQLite база данных (новичек)
Android SQLite база данных с паролем
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 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
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
15.02.2016, 17:33     База SQLite: метод по созданию таблицы не вызывается #23
xaat, ооо вон оно как, понимаю, как-то не заметил. Ну тогда вопрос снят, этим адаптером не пользуюсь.
Pablito
15.02.2016, 17:34
  #24

Не по теме:

алилуя

xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 18:15     База SQLite: метод по созданию таблицы не вызывается #25
qdhtnsoyndtr,
Попробуй удалить приложение с устройства и установить заново.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,724
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
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
16.02.2016, 09:48     База SQLite: метод по созданию таблицы не вызывается #28
Цитата Сообщение от xaat Посмотреть сообщение
Из курсора складываем в List?
Можно и так, можно просто курсор отправить в кастомный адаптер. Зачем нужны эти ограничения стандартного адаптера?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,724
16.02.2016, 18:01     База SQLite: метод по созданию таблицы не вызывается #29
Цитата Сообщение от xaat Посмотреть сообщение
Это не оплошность, а соглашение такое между разработчиками, стандарт... при чем здесь баги?
Я не уверен, что это стандарт. Да, видел такое соглашение, но на нём не делается упора. Можно легко менять названия полей так, как удобно.
В одной из старых статей на "Хабре" видел, что без "_id" в старых версиях Андроида не работало. Вот потому и решил, что это баг.
Цитата Сообщение от xaat Посмотреть сообщение
Не, нельзя, все что написано, или ришется, хоть это курсор адаптеры, различные хэлперы, различные ORMы все использует _id, ну так принято.
У кого-то принято, но писать можно так, как захочешь. Не спорю, другие библиотеки могут использовать эти соглашения. Вы же в БД, допустим, Oracle не обязаны писать id в качестве поля? А уж в интерфейсе - так и подавно.
Цитата Сообщение от xaat Посмотреть сообщение
пока не понадобится ormlite приделать или адаптер чужой
Это мне неведомо, покамест не приходилось использовать чужой адаптер. Я обычно изучаю код, что там написано. Если есть такая необходимость, поменяю. Ну, пожалуй, это самый сильный аргумент за "_id".
Цитата Сообщение от xaat Посмотреть сообщение
Как вы кстати, данные из базы данных отображаете в Активити без курсор адаптера, какой то свой велосипед изобрели? Из курсора складываем в List?
Конечно, прописываю адаптер. Под каждый ListView свой.
Да, к ORM приглядываюсь, может быть, это заставит перейти на "_id".
Pablito
16.02.2016, 18:57
  #30

Не по теме:

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

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

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

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

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