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

База данных и несколько активностей - Android

Восстановить пароль Регистрация
 
Mazilo
35 / 35 / 44
Регистрация: 31.10.2014
Сообщений: 194
01.11.2016, 14:17     База данных и несколько активностей #1
У приложения есть БД, данные из которой нужно доставать и каким-то образом с ними взаимодействовать в нескольких активностях. Как я понял, устанавливать соединение с базой для каждой активности - не совсем правильно. Можно как-то один раз установить соединение с базой, при запуске приложения, работать с ней в нескольких активностей, и потом при закрытии приложения закрыть соединение с базой?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 14:17     База данных и несколько активностей
Посмотрите здесь:

Один поток - несколько активностей Android
Android Наслоение активностей
Android ActionBar переход активностей
Android Сколько активностей может быть
Android Анимации открытия и закрытия активностей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
904 / 552 / 86
Регистрация: 13.02.2014
Сообщений: 2,041
01.11.2016, 14:31     База данных и несколько активностей #2
В принципе так и делается.
shavuz
55 / 61 / 10
Регистрация: 29.01.2014
Сообщений: 299
01.11.2016, 15:17     База данных и несколько активностей #3
если не очень заботитесь о расходе памяти, можете сделать синглтон, он живет все время пока аппликация работает и к нему можно обратиться с любого класса, назвать его нетворкменеджер, в классе аппликации или в мейн активити инициализировать, прописать в нем все функции которые нужны, и в нужных местах проекта просто вызывать его, например так: NetworkManager.getInstance().getData().

если да заботитесь о памяти, то просто создаете класс, прописываете в нем констрактор и паблик функции, в каждом месте где нужно к нему обратиться создаете его заново, обращаетесь к функции, получаете информацию с сервера через него и убиваете его по ненадобности
Mazilo
35 / 35 / 44
Регистрация: 31.10.2014
Сообщений: 194
01.11.2016, 15:45  [ТС]     База данных и несколько активностей #4
shavuz, а если я в onCreate - открыл соединение, работаю с базой, перехожу на следующие активности, где так же открываю соединение с базой, как-то изменяю ее, а в onDestroy() - закрываю подключение? Или же лучше закрывать подключение на onStop()?
shavuz
55 / 61 / 10
Регистрация: 29.01.2014
Сообщений: 299
01.11.2016, 15:59     База данных и несколько активностей #5
по этому нужен сингл тон, так легче управлять и ему можно передать когда закрыть, по правельному будет открыть когда нужно обратиться к бд и закрыть после получения даты
Mazilo
35 / 35 / 44
Регистрация: 31.10.2014
Сообщений: 194
01.11.2016, 16:26  [ТС]     База данных и несколько активностей #6
shavuz, так?
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
public class ApplicationDatabase {
    private static ApplicationDatabase instance;
    //---
    private Context context;
    private SQLiteDatabase database;
    private DBHelper dbHelper;
    //---
    public static final String DATABASE_NAME = "db_name";
    private static final int DATABASE_VERSION = 1;
    //
    // имена таблиц и полей
    //
    private static final String CREATE_DATABASE = "...";
 
    public ApplicationDatabase(Context context) {
        this.context = context;
    }
 
    public static synchronized ApplicationDatabase getInstance(Context context){
        if (instance == null) {
           instance = new ApplicationDatabase(context);
        }
        return instance;
    }
 
    /**
     * Open connection.
     */
    public void open() {
        dbHelper = new DBHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        database = dbHelper.getWritableDatabase();
    }
 
    /**
     * Close connection.
     */
    public void close() {
        if (dbHelper != null)
            dbHelper.close();
    }
    
    //
    // методы для работы с бд - вставка, удаление, получение данных...
    //
 
    private class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                        int version) {
            super(context, name, factory, version);
        }
 
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_DATABASE);
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
}
shavuz
55 / 61 / 10
Регистрация: 29.01.2014
Сообщений: 299
01.11.2016, 16:50     База данных и несколько активностей #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
на счет инстанс не уверен, правельно вот так
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
public class ApplicationDatabase
{
    private static ApplicationDatabase ourInstance = new ApplicationDatabase();
     SQLiteDatabase mSQLiteDatabase;
    private DBHelper mDBHelper;
    //---
    public static final String DATABASE_NAME = "db_name";
    private static final int DATABASE_VERSION = 1;
 
    public static ApplicationDatabase getInstance()
    {
        return ourInstance;
    }
 
    private ApplicationDatabase()
    {
    }
 
 
 
    /**
     * Open connection.
     */
    public void open(Context context) {
        mDBHelper = new DBHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        mSQLiteDatabase = mDBHelper.getWritableDatabase();
    }
 
    /**
     * Close connection.
     */
    public void close() {
        if (mDBHelper != null)
            mDBHelper.close();
    }
 
    //
    // методы для работы с бд - вставка, удаление, получение данных...
    //
 
    private class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                        int version) {
            super(context, name, factory, version);
        }
 
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_DATABASE);
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
}
и с любого места в проекте, например надо сделать опен:
Java
1
ApplicationDatabase.getInstance().open(this)
дальше. я бы не советовал делать дбХелпер класс внутри синглтона, лучше вынести его отдельно, пусть себе сам по себе живет. и еще. вы держите контекст в этом классе, это мемори лик, получается активити или фрагмент всегда прикреплен через контекст к синглтону. вообще лучше не держать контекст, убрать его вообще из синглтона и из инит, тогда вообще не нужна будет функция инит, его не надо будет инициализировать, а контекст передавать через функции опен,и еще где нужно будет.
Mazilo
35 / 35 / 44
Регистрация: 31.10.2014
Сообщений: 194
01.11.2016, 16:59  [ТС]     База данных и несколько активностей #8
shavuz, понял. А если нужно сделать какое-то действие с базой, я должен каждый раз ее открывать методом open(), выполнять необходимое действие, допустим getAllData(), и после этого незамедлительно ее закрывать методом close()? Или можно в начале метода onCreate() открыть, а в конце закрыть?
shavuz
55 / 61 / 10
Регистрация: 29.01.2014
Сообщений: 299
01.11.2016, 17:07     База данных и несколько активностей #9
Зачем держать все время дб открытой? есть этому причина? открыли, получили, закрыли))
Mazilo
35 / 35 / 44
Регистрация: 31.10.2014
Сообщений: 194
01.11.2016, 17:15  [ТС]     База данных и несколько активностей #10
shavuz, все, понял, спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 18:22     База данных и несколько активностей
Еще ссылки по теме:

Усложненная настройка анимаций переходов активностей Android
Android Несколько Активностей и кнопки
Один ActionBar дл всех активностей Android

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

Или воспользуйтесь поиском по форуму:
Rube
904 / 552 / 86
Регистрация: 13.02.2014
Сообщений: 2,041
01.11.2016, 18:22     База данных и несколько активностей #11
В сети куча примеров, вот почитайте на досуге
http://developer.alexanderklimov.ru/...oid-sqlite.php
http://www.journaldev.com/9438/andro...ample-tutorial
http://www.tutorialspoint.com/androi...qlite_database
Yandex
Объявления
01.11.2016, 18:22     База данных и несколько активностей
Ответ Создать тему
Опции темы

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