Форум программистов, компьютерный форум 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:... подробнее

Показать сообщение отдельно
Naomis
5 / 5 / 1
Регистрация: 11.03.2015
Сообщений: 196
Завершенные тесты: 1

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

09.04.2015, 18:03. Просмотров 2030. Ответов 41
Метки (Все метки)

Добрый день. Разрабатываю приложение и столкнулся с проблемой... Лог выдаёт вот такое:

FATAL EXCEPTION: main
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase:

Понапихал Log.v всюду, чтобы разобраться, но ни как, мой уровень не позволяет.
Ясное дело гуглил, но либо я дурак, либо лыжи... Так что взываю о помощи к вам. В заранее спасибо.


Та самая проблемная активити.
EventActivity.java
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
 
        Log.v(TAG, "ОТКРЫВАЕМ ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ" );
 
        // открываем подключение к БД
        db = new DB(this);
        db.open();
 
        Log.v(TAG, "ОК- ОТКРЫЛИ" );
 
        // РАСКРЫВАЮЩИЕСЯ СПИСОКИ
 
        edtMan = (Spinner) findViewById(R.id.ManSpinner);
        edtET = (Spinner) findViewById(R.id.ETSpinner);
        edtMeet = (Spinner) findViewById(R.id.MeetingSpinner);
 
        //СПИНЕРЫ MAN - EVENT TYPE - MEET
        CreatNewSpinnerFU("man", "name", edtMan);
        CreatNewSpinnerFU("event_type", "name", edtET);
        CreatNewSpinnerFU("meeting", "name", edtMeet);
 
 
        checkboxEvent = (CheckBox) findViewById(R.id.checkBox);
 
        Log.v(TAG, "ЖДЁМ 'ТЫК' КНОПКИ" );
 
        btnEvent  = (Button) findViewById(R.id.new_event_in_tab);
        btnEvent.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Do something in response to button click
 
                boolean checkMan= !true,
                        checkET = !true,
                        checkMeet = !true;
 
                Log.v(TAG, "ТЫК!" );
 
                //checkMan = !true; checkET = !true; checkMeet = !true;
 
                Log.v(TAG, "РАБОТАЕ С МАНАМИ --- if (edtMan.getSelectedItem() != null) ---" );
 
                if (edtMan.getSelectedItem() != null)
                {
                    Log.v(TAG, "----if МЫ ВНУТРИ  -----" );
                    Log.v(TAG, "----if -----   checkMan = true;" );
                    checkMan = true;
                    Log.v(TAG, "----if -----   checkMan = true;-- ОК" );
 
 
                    Log.v(TAG, "----if----- ПРИСВАИВАЕМ КУРСОРУ  cur = db.GetCatalogValueByName(.........);" );
                    cur = db.GetCatalogValueByName("man", "_id", "name", edtMan.getSelectedItem().toString());
                    Log.v(TAG, "----if----- ПРИСВАИВАЕМ КУРСОРУ  cur = db.GetCatalogValueByName(.........);-------ОК" );
 
                    Log.v(TAG, "----if-----   ПРИСВАИВАЕМ _id ---- cManID = cur.getInt(...._id\")-----" );
                    cManID = cur.getInt(cur.getColumnIndex("_id"));
                    Log.v(TAG, "----if-----   ПРИСВАИВАЕМ _id ---- cManID = cur.getInt(...._id\")-----ОК" );
                    //db.addRec("event", DB.EVENT_COLUMN_MAN, cManID );
                }
 
                Log.v(TAG, "РАБОТАЕ С EВЕНТ ТАЙПОМ --- if (edtET.getSelectedItem() != null) ---" );
                if (edtET.getSelectedItem() != null)
                {
                    checkET = true;
                    cur = db.GetCatalogValueByName("event_type", "_id", "FullName", edtET.getSelectedItem().toString());
                    cETID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_EVENT_TYPE, cETID );
                }
 
                Log.v(TAG, "РАБОТАЕ С МИТОМ --- if (edtMeet.getSelectedItem() != null) ---" );
                if (edtMeet.getSelectedItem() != null)
                {
                    checkMeet = true;
                    cur = db.GetCatalogValueByName("event_type", "_id", "FullName", edtMeet.getSelectedItem().toString());
                    cMeetID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_MEETING, cMeetID );
                }
 
                Log.v(TAG, "ПРОВЕРЯЕМ ФЛАГИ НА 'TRUE' ПОСЛЕ ПИШЕМ В ТАБЛИЦУ 'event' --- if(checkMan != false & checkET != false & checkMeet != false) ---" );
 
                //Если все значения true, то записываем данные в таблицу "event"
                if(checkMan != false & checkET != false & checkMeet != false){
 
                    Log.v(TAG, "ЗАПИСЬ В ТАБЛИЦУ ---- db.addRec(\"event\", DB.EVENT_COLUMN_MAN, cManID ); ---" );
                    db.addRec("event", DB.EVENT_COLUMN_MAN, cManID );
                    Log.v(TAG, "ОК" );
 
                    Log.v(TAG, "ЗАПИСЬ В ТАБЛИЦУ ---- db.addRec(\"event\", DB.EVENT_COLUMN_EVENT_TYPE, cETID ); ---" );
                    db.addRec("event", DB.EVENT_COLUMN_EVENT_TYPE, cETID );
                    Log.v(TAG, "ОК" );
 
                    Log.v(TAG, "ЗАПИСЬ В ТАБЛИЦУ ЧЕКБОКСИКА ---- ---" );
                    db.addRec("event", DB.EVENT_COLUMN_MEETING, cMeetID );
 
                    if (checkboxEvent.isChecked() == true) {
                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 1 );
                        Log.v(TAG, "ОК---1" );
 
                    }else {
                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 0 );
                        Log.v(TAG, "ОК---0" );
                    }
 
                }
 
 
            }
        });
        db.close();
    }
//СОЗДАНИЕ SPINNER
    public void CreatNewSpinnerFU(String name_table, String name_column, Spinner qwerty) {
        List ListArray = new ArrayList();
        Cursor Post = db.GetCatalogByName(name_table);
        Post.moveToFirst();
 
        if (Post != null && Post.getCount() > 0) {
            do {
                ListArray.add(Post.getString(Post.getColumnIndex(name_column)));
            } while (Post.moveToNext());
 
            ArrayAdapter dataAdapterPost = new ArrayAdapter(this, android.R.layout.simple_spinner_item, ListArray);
            dataAdapterPost.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            qwerty.setAdapter(dataAdapterPost);
        }
    }

Класс с базой данных.
BD.java
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
public class DB {
 
    private static final String TAG = "DB__ACTIVITY";
 
 
    private static final String DB_NAME = "Allreg";
    private static final int DB_VERSION = 1;
    //man
    private static final String DB_TABLE = "man";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NAME = "name";
 
    private static final String DB_CREATE =
            "create table " + DB_TABLE + "(" +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_NAME + " text" +
                    ");";
 
    //event type
    private static final String EVENT_TYPE_TABLE = "event_type";
    public static final String EVENT_TYPE_COLUMN_ID = "_id";
    public static final String EVENT_TYPE_COLUMN_NAME = "name";
 
    private static final String EVENT_TYPE_DB_CREATE =
            "create table " + EVENT_TYPE_TABLE + "(" +
                    EVENT_TYPE_COLUMN_ID + " integer primary key autoincrement, " +
                    EVENT_TYPE_COLUMN_NAME + " text" +
                    ");";
 
    //meeting
    private static final String MEETING_TABLE = "meeting";
    public static final String MEETING_COLUMN_ID = "_id";
    public static final String MEETING_COLUMN_NAME = "name";
 
    private static final String MEETING_DB_CREATE =
            "create table " + MEETING_TABLE + "(" +
                    MEETING_COLUMN_ID + " integer primary key autoincrement, " +
                    MEETING_COLUMN_NAME + " text" +
                    ");";
 
    //event
    private static final String EVENT_TABLE = "event";
    public static final String EVENT_COLUMN_ID = "_id";
    public static final String EVENT_COLUMN_MAN = "ManId";
    public static final String EVENT_COLUMN_MEETING = "MeetingId";
    public static final String EVENT_COLUMN_EVENT_TYPE = "EventTypeId";
    public static final String EVENT_COLUMN_VALUE = "Value";
 
    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" +
                    ");";
 
    private final Context mCtx;
 
 
    private DBHelper mDBHelper;
    private SQLiteDatabase mDB;
 
    public DB(Context ctx) {
        mCtx = ctx;
    }
 
    // открыть подключение
    public void open() {
        mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);
        mDB = mDBHelper.getWritableDatabase();
    }
 
    // закрыть подключение
    public void close() {
        if (mDBHelper!=null) mDBHelper.close();
    }
 
    // получить все данные из таблицы DB_TABLE
    public Cursor getAllData(String name_DB) {
        String str = name_DB;
        return mDB.query(str, null, null, null, null, null, null);
    }
 
    // удалить запись из DB_TABLE
    //-----------------------------------поправить работу с _id
    public void delRec(String name_DB , String column_id , long id) {
        String str = name_DB;
        String col_id = column_id;
        mDB.delete(name_DB, col_id + " = " + id, null);
    }
 
    // ФУНКЦИЯ РАБОТЫ С БД
    // ПОЛУЧЕНИЕ СПРАВОЧНИКА ПО ИМЕНИ
    public Cursor GetCatalogByName(String FullName)
    {
        Cursor cur = mDB.rawQuery("select * from " + FullName.toString() , null);
        cur.moveToFirst();
        return cur;
    }
 
    // ПОЛУЧЕНИЕ ПОЛЯ В СПРАВОЧНИКЕ ПО ИМЕНИ ПОЛЯ И СПРАВОЧНИКА
    public Cursor GetCatalogValueByName(String CatalogFullName,
                                        String FieldFullName,
                                        String ConditionField,
                                        String Value)
    {
        //Open();
 
        Log.v(TAG, "----МЫ В GetCatalogValueByName----");
 
        Log.v(TAG,"---ПРОСМОТР ПОСТУПАЮЩИХ ДАННЫХ." + " select " + FieldFullName + " from " + CatalogFullName +
                " where " + ConditionField + " = '" + Value + "'" );
 
        Cursor cur = mDB.rawQuery(" select " + FieldFullName +
                " from " + CatalogFullName +
                " where " + ConditionField + " = '" + Value + "'"
                , null);
 
        Log.v(TAG, " select " + FieldFullName +
                " from " + CatalogFullName +
                " where " + ConditionField + " = '" + Value + "'");
 
        cur.moveToFirst();
        //Close();
 
        Log.v(TAG, cur.getCount() + "");
 
        return cur;
    }
 
    // класс по созданию и управлению БД
    private class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context, String name, CursorFactory factory,
                        int version) {
            super(context, name, factory, version);
        }
 
        // создаем и заполняем БД
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DB_CREATE);
            db.execSQL(EVENT_TYPE_DB_CREATE);
            db.execSQL(MEETING_DB_CREATE);
            db.execSQL(EVENT_DB_CREATE);
 
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
}



И сам лог
Prolog
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
04-09 15:46:08.708  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ОТКРЫВАЕМ ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ
04-09 15:46:08.728  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ОК- ОТКРЫЛИ
04-09 15:46:08.728  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ЖДЁМ 'ТЫК' КНОПКИ
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ТЫК!
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ РАБОТАЕ С МАНАМИ --- if (edtMan.getSelectedItem() != null) ---
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ----if МЫ ВНУТРИ  -----
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ----if -----   checkMan = true;
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ----if -----   checkMan = true;-- ОК
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/EVENT__ACTIVITY﹕ ----if----- ПРИСВАИВАЕМ КУРСОРУ  cur = db.GetCatalogValueByName(.........);
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/DB__ACTIVITY﹕ ----МЫ В GetCatalogValueByName----
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg V/DB__ACTIVITY﹕ ---ПРОСМОТР ПОСТУПАЮЩИХ ДАННЫХ.
    select _id from man where name = 'Вася '
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg D/AndroidRuntime﹕ Shutting down VM
04-09 15:46:12.092  10679-10679/com.example.kirukato.coolstdreg W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4154d8b0)
04-09 15:46:12.102  10679-10679/com.example.kirukato.coolstdreg E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.example.kirukato.coolstdreg/databases/Allreg
            at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
            at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
            at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1261)
            at com.example.kirukato.coolstdreg.DB.GetCatalogValueByName(DB.java:154)
            at com.example.kirukato.coolstdreg.EventActivity$1.onClick(EventActivity.java:96)
            at android.view.View.performClick(View.java:4421)
            at android.view.View$PerformClick.run(View.java:17903)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:5225)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)
Программа не вся, так как тут есть ограничение по символам. Надеюсь на вашу помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru