Форум программистов, компьютерный форум 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Night_Scream_
55 / 55 / 6
Регистрация: 08.08.2013
Сообщений: 514
15.02.2016, 15:53     База SQLite: метод по созданию таблицы не вызывается #2
qdhtnsoyndtr, принято _id
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
15.02.2016, 15:56  [ТС]     База SQLite: метод по созданию таблицы не вызывается #3
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
принято id_
Не понял, можно подробней?
_Night_Scream_
55 / 55 / 6
Регистрация: 08.08.2013
Сообщений: 514
15.02.2016, 16:02     База SQLite: метод по созданию таблицы не вызывается #4
qdhtnsoyndtr, обшибся не id_ , а _id
это как некий стандарт, где то читал что и ошибки были при использовании id
http://vlad8.com/tech/android-sqlite-database/
вот пример, да и гугл много чего выдает.

Бегло пробежался по коду, ошибок не увидел, попробуйте очистить базу (приложение) или создать с другим именем.
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
15.02.2016, 16:02     База SQLite: метод по созданию таблицы не вызывается #5
человек выше хотел сказать что в этой строке
Java
1
2
3
4
db.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "name text,"
                    + "email text" + ");");
вместо просто id, принято писать "_id"
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 16:04     База SQLite: метод по созданию таблицы не вызывается #6
А почему не писать tablename_id, tablename2_id? Удобнее же при добавлении, например, в таблицу людей ид их квартир.
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
15.02.2016, 16:16  [ТС]     База SQLite: метод по созданию таблицы не вызывается #7
_Night_Scream_, Поправил, но все равно те же ошибки.
Попробую с вашей ссылки реализовать.

Добавлено через 1 минуту
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А почему не писать tablename_id, tablename2_id? Удобнее же при добавлении, например, в таблицу людей ид их квартир.
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 16:17     База SQLite: метод по созданию таблицы не вызывается #8
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
Это больше был вопрос к знающим людям. Может есть подводные камни при такой реализации.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
15.02.2016, 16:29     База SQLite: метод по созданию таблицы не вызывается #9
Цитата Сообщение от Паблито Посмотреть сообщение
вместо просто id, принято писать "_id"
в мохнатые годы по древним мануалам.
_Night_Scream_
55 / 55 / 6
Регистрация: 08.08.2013
Сообщений: 514
15.02.2016, 16:37     База SQLite: метод по созданию таблицы не вызывается #10
CoolMind, хотите не древний и не мохнатый?
http://www.fandroid.info/urok-34-rab...ite-v-android/
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 16:42     База SQLite: метод по созданию таблицы не вызывается #11
_Night_Scream_, а если я на сайте handroid.info напишу, что нужно писать с восклицательным знаком и только в полнолуние, тоже будете так делать?
Паблито
15.02.2016, 16:48
  #12

Не по теме:

да пофиг вообще в какие годы и по каким мануалам, тут принципально чувак отписался, потому что пытается меня поддеть, он даже не дочитал что я расшифровывал фразу

Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
qdhtnsoyndtr, принято _id
кто как хочет так и называет на самом деле, плевать что в классе BaseColumns есть готовая константа
Java
1
2
3
4
5
    /**
     * The unique ID for a row.
     * <P>Type: INTEGER (long)</P>
     */
    public static final String _ID = "_id";

_Night_Scream_
55 / 55 / 6
Регистрация: 08.08.2013
Сообщений: 514
15.02.2016, 16:52     База SQLite: метод по созданию таблицы не вызывается #13
Spelcrawler, а вы напишите, посмотрим.
Аргументируйте внятно и трезво.
Я говорю о том как принято, это не я придумал, причину я находил на хабре.
Сам я аргументировать и громко призывать не буду, я привел ссылки, каких гугл выдает с десяток.

Еще есть такой момент, fandroid как и startandroid заслуживают большого уважения, человек очень много часов вложил во благо общества бескорыстно.
А теперь... вы кто и что за handroid я без понятия, это главный ответ, пожалуй.

Вам лишь бы поспорить, аргументируйте и пишите не ерепенясь, тогда диалог будет весьма приятным и конструктивным.

----
Тоже хотел написать про BaseColumns из гугла.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 16:59     База SQLite: метод по созданию таблицы не вызывается #14
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
А теперь... вы кто и что за handroid я без понятия
Ну вот и я про то же. Авторитета этот сайт не вызывает.
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
Вам лишь бы поспорить
Ну в споре рождается истина же) Да, я люблю поспорить, но не с целью кого-то унизить или доказать свою точку зрения, какой бы она ни была, а чтобы найти ту самую истину.
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
аргументируйте и пишите не ерепенясь
Ну это ведь вы говорите, что нужно так, а я спрашиваю аргументы)
Паблито
15.02.2016, 17:04
  #15

Не по теме:

ну там проблемы возникнут с CursorAdapter-ом, который типа уже устарел, но курсор лоадеры мало кто (судя по вопросам на форуме) осилил

xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 17:06     База SQLite: метод по созданию таблицы не вызывается #16
вместо просто id, принято писать "_id"
Ну это ведь вы говорите, что нужно так, а я спрашиваю аргументы)
Ну попробуй использовать например SimpleCursorAdapter с первичным ключем отличны от "_id", да и кроме этого хватает проблем.
Вот кусок из адаптера для RecyclerView
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public Cursor swapCursor(Cursor newCursor) {
        if (newCursor == mCursor) {
            return null;
        }
        Cursor oldCursor = mCursor;
        mCursor = newCursor;
        if (newCursor != null) {
            mRowIDColumn = newCursor.getColumnIndexOrThrow("_id");
            mDataValid = true;
            // notify the observers about the new cursor
            notifyDataSetChanged();
        } else {
            mRowIDColumn = -1;
            mDataValid = false;
            // notify the observers about the lack of a data set
            notifyItemRangeRemoved(0, getItemCount());
        }
        return oldCursor;
    }
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 17:18     База SQLite: метод по созданию таблицы не вызывается #17
xaat, попробовал
Java
1
2
3
4
5
6
public static final String USER_ID = "user_id";
public static final String USER_NAME = "name";
 
User user = new User();
user.setId(cursor.getInt(cursor.getColumnIndex(USER_ID)));
user.setName(cursor.getString(cursor.getColumnIndex(USER_NAME)));
Из реального кода скопировал - вполне работает.
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
15.02.2016, 17:22     База SQLite: метод по созданию таблицы не вызывается #18
создай новую таблицу и укажи там имя autoincrement поля что-то отличное от _id
об этом речь, а не об обычных полях
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
15.02.2016, 17:23     База SQLite: метод по созданию таблицы не вызывается #19
Паблито, ну вот из создания той же таблицы
Java
1
INTEGER PRIMARY KEY AUTOINCREMENT
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2016, 17:24     База SQLite: метод по созданию таблицы не вызывается
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
15.02.2016, 17:24     База SQLite: метод по созданию таблицы не вызывается #20
Spelcrawler, База SQLite: метод по созданию таблицы не вызывается
и что мне дает этот текст ? INTEGER PRIMARY KEY AUTOINCREMENT
там даже не указано имя
Yandex
Объявления
15.02.2016, 17:24     База SQLite: метод по созданию таблицы не вызывается
Ответ Создать тему
Опции темы

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