Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 491
#1

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

15.02.2016, 15:45. Просмотров 920. Ответов 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
http://www.cyberforum.ru/android-dev/thread1108004.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2016, 15:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос База SQLite: метод по созданию таблицы не вызывается (Программирование Android):

База данных SQLite
Добрый день. Может я повторюсь с вопросом, но вы уж меня простите, не могу...

AutoCompleteTextView + база sqlite
Вопрос вот в чем, имеется база и элемент AutoCompleteTextView. Задача в том,...

Подскажите - не вызывается метод в потоке
progress = ProgressDialog.show(getActivity(), "Please wait...", ...

SQLite база данных с паролем
Есть база данных защищенная ключом! Сама база данных хранится на устройстве....

Не создается база данных SQLite
Здравствуйте уважаемы форумчане! Столкнулся с проблем, не создается база...

30
_Night_Scream_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 622
15.02.2016, 15:53 #2
qdhtnsoyndtr, принято _id
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 491
15.02.2016, 15:56  [ТС] #3
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
принято id_
Не понял, можно подробней?
0
_Night_Scream_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 622
15.02.2016, 16:02 #4
qdhtnsoyndtr, обшибся не id_ , а _id
это как некий стандарт, где то читал что и ошибки были при использовании id
http://vlad8.com/tech/android-sqlite-database/
вот пример, да и гугл много чего выдает.

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

Добавлено через 1 минуту
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А почему не писать tablename_id, tablename2_id? Удобнее же при добавлении, например, в таблицу людей ид их квартир.
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
15.02.2016, 16:17 #8
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
Это больше был вопрос к знающим людям. Может есть подводные камни при такой реализации.
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
15.02.2016, 16:29 #9
Цитата Сообщение от Паблито Посмотреть сообщение
вместо просто id, принято писать "_id"
в мохнатые годы по древним мануалам.
0
_Night_Scream_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 622
15.02.2016, 16:37 #10
CoolMind, хотите не древний и не мохнатый?
http://www.fandroid.info/urok-34-rab...ite-v-android/
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
15.02.2016, 16:42 #11
_Night_Scream_, а если я на сайте handroid.info напишу, что нужно писать с восклицательным знаком и только в полнолуние, тоже будете так делать?
0
Pablito
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";

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

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

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

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

Не по теме:

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

0
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 17:06 #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;
    }
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
15.02.2016, 17:18 #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)));
Из реального кода скопировал - вполне работает.
0
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
15.02.2016, 17:22 #18
создай новую таблицу и укажи там имя autoincrement поля что-то отличное от _id
об этом речь, а не об обычных полях
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
15.02.2016, 17:23 #19
Паблито, ну вот из создания той же таблицы
Java
1
INTEGER PRIMARY KEY AUTOINCREMENT
0
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
15.02.2016, 17:24 #20
Spelcrawler, http://www.cyberforum.ru/android-dev/thread1662881.html#post8757730
и что мне дает этот текст ? INTEGER PRIMARY KEY AUTOINCREMENT
там даже не указано имя
0
15.02.2016, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2016, 17:24
Привет! Вот еще темы с решениями:

SQLite база данных (новичек)
Здравствуйте уважаемые программисты. Подскажите пожалуйста как можно при...

Android, ListView, база данных SQLite
Как достать картинку из БД (SQLite) и поместить её в ListView??? помогите,...

База SqLite - проверка записей на существование
Помоги разрешить следующую ситуацию. у меня есть метод который получает...

Метод вызывается только после второго нажатия на кнопку
есть метод import com.github.nkzawa.emitter.Emitter; import...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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