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

"Attempt to re-open an already-closed object" при работе с SQLite - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Android и джойстик http://www.cyberforum.ru/android-dev/thread1416961.html
Всем привет Я создаю игру что то наподобие "alien shooter" и управлять героем с экрана как то не очень удобно и вот хочу в проекте реализовать поддержку джойстика. А как его подключать и что для него использовать я не знаю, помогите плз информацией.
Программирование Android Синхронизация баз данных на клиенте и сервере Здравствуйте, подскажите как реализовать простенькое клиент-серверное приложение в котором при редактировании бд сервера автоматически будет менятся бд клиента на устройстве (я понял так выглядит механизм репликация), спасибо) http://www.cyberforum.ru/android-dev/thread1416904.html
Изменить голубой цвет "список закончился" Программирование Android
Не знаю у кого как, но у меня при листании за пределы списка появляется голубая "туманная полоска" с той стороны где она закончилась (списки сверху вниз, табы справа-налево). Могу ее полностью отключить в моих списках запретив листать за пределы, но можно ли изменить цвет??? Голубой дико смотрится на красном, рыжем или коричневых тонах! Например сейчас у меня установлена Voice Recorder на...
Программирование Android Режим полета - перехват изменения, включение, отключение
Помогите! Кто что знает, слышал, писал... Поможет все! Кнопка случайно нажимается и... я вне связи! И даже не знаю об этом! Есть ли ресиверы? Можно ли узнавать по таймеру функцией? Можно ли вернуть после случайного отключения - включить. Можно ли отключать по таймеру (на ночь). Где-то находил индикатор активации для двухсимочного - для каждой симки, но не уверен что это универсально. ...
Программирование Android Получить отдельный кадр с камеры http://www.cyberforum.ru/android-dev/thread1416836.html
У меня идет захват видео через камеру. Но мне нужно анализировать из этого видео кадры. Как правильно сохранять каждый кадр видео с камеры?? Какая есть для этого структура?? Можете написать фрагмент сохранения(выделения) отдельных кадров видео с камеры?? Добавлено через 1 час 29 минут Мне в моем приложении нужно просто брать кадр и анализировать. Для этого нужно сохранять его куда нибудь в...
Программирование Android Debugger, как правильно с ним работать? День добрый. Подключаю свой девайс к компьютеру, Android Studio его видит. В режиме дебагинга выбираю запустить приложение на моём устройстве. Ранее никаких проблем не было и приложение всегда запускалось, и на всех брикпоинтах программа останавливалась. А вдруг непонятно с чего начались 2 беды: 1) Приложение просто не запускается. AS пишет "Connected to the target VM, address:... подробнее

Показать сообщение отдельно
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
12.04.2015, 09:59
Naomis, весь твой головняк из-за невнимательности.
Объясняю

Java
1
2
3
4
5
6
7
8
 private static final String EVENT_DB_CREATE =
            "create table " + EVENT_TABLE + "(" +
                    EVENT_COLUMN_ID + " integer primary key autoincrement, " +
                    EVENT_COLUMN_MAN + " integer" +
                    EVENT_COLUMN_MEETING + " integer" +
                    EVENT_COLUMN_EVENT_TYPE + " integer" +
                    EVENT_COLUMN_VALUE + " integer" +
                    ");";
плюс

Java
1
db.execSQL(EVENT_DB_CREATE);
создаё таблицу следующей структуры

_id | integer primary key autoincrement
ManId | integerMeetingId integerEventTypeId integerValue integer
И естественно в этой таблице нет полей ни MeetingId, ни EventTypeId, ни Value.

Ты можешь возразить, дескать, какого х№, такая таблица вообще создалась с таким типом поля! и куда смотрит прогрессивная общественность?

И тут ты идёшь смотреть спецификацию SQLite и находшь
2.1 Determination Of Column Affinity

The affinity of a column is determined by the declared type of the column, according to the following rules in the order shown:

1. If the declared type contains the string "INT" then it is assigned INTEGER affinity.


2. If the declared type of the column contains any of the strings "CHAR", "CLOB", or "TEXT" then that column has TEXT affinity. Notice that the type VARCHAR contains the string "CHAR" and is thus assigned TEXT affinity.

3. If the declared type for a column contains the string "BLOB" or if no type is specified then the column has affinity NONE.

4. If the declared type for a column contains any of the strings "REAL", "FLOA", or "DOUB" then the column has REAL affinity.

Otherwise, the affinity is NUMERIC.

Note that the order of the rules for determining column affinity is important. A column whose declared type is "CHARINT" will match both rules 1 and 2 but the first rule takes precedence and so the column affinity will be INTEGER.
Т.е. типом ты можешь пытаться указать любой набор буков, но, как тольковстретится подходящее по вышеуказанным правилам, тип поля будет выбран автоматически.

Что у тебя и случилось - несмотря на заявленный добой для типа поля набор "integerMeetingIdintegerEventTypeIdintegerValueinteger", SQLite находит там "int" и для себя считает это поле типа INTEGER.
Для него всё просто и понятно и он даже не подумал ругаться, а просто взял и создал вот такую таблицу.

А ты сиди и жди когда там появится поле MeetingId или EventTypeId или Value.

Камрад Rube заметил некоторую неточность

Цитата Сообщение от Rube Посмотреть сообщение
А запятые кто будет проставлять?
Ты тут же отрапортовал

Цитата Сообщение от Naomis Посмотреть сообщение
Rube, осознал ошибку, проставил запятые...
Java
1
2
3
4
5
6
7
8
private static final String EVENT_DB_CREATE =
* * * * * * "create table " + EVENT_TABLE + "(" +
* * * * * * * * * * EVENT_COLUMN_ID + " integer primary key autoincrement, " +
* * * * * * * * * * EVENT_COLUMN_MAN + " integer," +
* * * * * * * * * * EVENT_COLUMN_MEETING + " integer," +
* * * * * * * * * * EVENT_COLUMN_EVENT_TYPE + " integer," +
* * * * * * * * * * EVENT_COLUMN_VALUE + " integer" +
* * * * * * * * * * ");";
И теоретически это попытка выполнения следующего запроса

create table event(_id integer primary key autoincrement, ManId integer,MeetingId integer,EventTypeId integer,Value integer);
И, если бы была возможность - Андрюха завершил бы программу и ругнулся на недопустимый синтаксис.
Но он этого не сделал.

Почему?
Дык потому, что при создании объекта твоего класса DBHelper (наследника SQLiteOpenHelper) система посмотрела, что
1. База уже существует, а значит никаких onCreate вызывать не нужно будет.
2. Её версия осталсь прежней, а значит никаких изменений вноситься не должно, и никакие onUpgrade и onDowngrade вызывать также.

Поэтому все изменения внесённые в EVENT_DB_CREATE нигде не используются и база, как была так и осталась со старой таблицей event, но опяь же без полей MeetingId или EventTypeId или Value.

"Короче, Склифосовский"(с)

Чтобы подправить твою базу "на лету":

1. Добавляем пробелы после запятых
Java
1
2
3
4
5
6
7
8
private static final String EVENT_DB_CREATE =
* * * * * * "create table " + EVENT_TABLE + "(" +
* * * * * * * * * * EVENT_COLUMN_ID + " integer primary key autoincrement, " +
* * * * * * * * * * EVENT_COLUMN_MAN + " integer, " +
* * * * * * * * * * EVENT_COLUMN_MEETING + " integer, " +
* * * * * * * * * * EVENT_COLUMN_EVENT_TYPE + " integer, " +
* * * * * * * * * * EVENT_COLUMN_VALUE + " integer" +
* * * * * * * * * * ");";
2. Изменяем номер версии на больший, например, 2.
Java
1
private static final int DB_VERSION = 2;
3. Прописываем перtсоздание таблицы value в onUpgrade
Java
1
2
3
4
5
@Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL(EVENT_DB_CREATE);
 
        }
4. ПИЛЯТЪ , убери же наконец
Java
1
2
3
4
5
6
 public void onPause()
    {
        super.onPause();
        Log.d("on pause", " / ");
        db.close();
    }
ВСЁ! Бей яйца и разговляйся. Только аккуратно, синька - зло
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru