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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Mazilo
36 / 36 / 44
Регистрация: 31.10.2014
Сообщений: 206
#1

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

01.11.2016, 14:17. Просмотров 175. Ответов 10
Метки нет (Все метки)

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

Несколько Активностей и кнопки - Программирование Android
Не переключается на другую активность по нажатию кнопки, хотя в манифесте прописано. Подскажите что исправить в коде. import...

Один поток - несколько активностей - Программирование Android
Пытаюсь разобраться с блютузом. За основу взял пример BluetoothChat. Выполняю соединение с устройством блютуз в одном активити...

Стэки Активностей - Программирование Android
Всем привет. Подскажите где ошибся. Нужна небольшая помощь.Много читал про стэки но все ровно не чего не понял. И объяснить не кому. В...

Наслоение активностей - Программирование Android
Всё ниже: private GridView.OnItemClickListener gridviewOnItemClickListener = new GridView.OnItemClickListener() { @Override ...

ActionBar переход активностей - Программирование Android
как сделать что бы при выборе элемента tab переходило на другую активность android.support.v7.app.ActionBar.Tab tab =...

Жизненный цикл активностей - Программирование Android
Здравствуйте, уважаемые форумчане. Столкнулся с небольшой проблемой, думаю вы сможете мне помочь. В моем приложении 1 activity и много...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
01.11.2016, 14:31 #2
В принципе так и делается.
shavuz
104 / 110 / 21
Регистрация: 29.01.2014
Сообщений: 552
01.11.2016, 15:17 #3
если не очень заботитесь о расходе памяти, можете сделать синглтон, он живет все время пока аппликация работает и к нему можно обратиться с любого класса, назвать его нетворкменеджер, в классе аппликации или в мейн активити инициализировать, прописать в нем все функции которые нужны, и в нужных местах проекта просто вызывать его, например так: NetworkManager.getInstance().getData().

если да заботитесь о памяти, то просто создаете класс, прописываете в нем констрактор и паблик функции, в каждом месте где нужно к нему обратиться создаете его заново, обращаетесь к функции, получаете информацию с сервера через него и убиваете его по ненадобности
Mazilo
36 / 36 / 44
Регистрация: 31.10.2014
Сообщений: 206
01.11.2016, 15:45  [ТС] #4
shavuz, а если я в onCreate - открыл соединение, работаю с базой, перехожу на следующие активности, где так же открываю соединение с базой, как-то изменяю ее, а в onDestroy() - закрываю подключение? Или же лучше закрывать подключение на onStop()?
shavuz
104 / 110 / 21
Регистрация: 29.01.2014
Сообщений: 552
01.11.2016, 15:59 #5
по этому нужен сингл тон, так легче управлять и ему можно передать когда закрыть, по правельному будет открыть когда нужно обратиться к бд и закрыть после получения даты
Mazilo
36 / 36 / 44
Регистрация: 31.10.2014
Сообщений: 206
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
104 / 110 / 21
Регистрация: 29.01.2014
Сообщений: 552
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
36 / 36 / 44
Регистрация: 31.10.2014
Сообщений: 206
01.11.2016, 16:59  [ТС] #8
shavuz, понял. А если нужно сделать какое-то действие с базой, я должен каждый раз ее открывать методом open(), выполнять необходимое действие, допустим getAllData(), и после этого незамедлительно ее закрывать методом close()? Или можно в начале метода onCreate() открыть, а в конце закрыть?
shavuz
104 / 110 / 21
Регистрация: 29.01.2014
Сообщений: 552
01.11.2016, 17:07 #9
Зачем держать все время дб открытой? есть этому причина? открыли, получили, закрыли))
Mazilo
36 / 36 / 44
Регистрация: 31.10.2014
Сообщений: 206
01.11.2016, 17:15  [ТС] #10
shavuz, все, понял, спасибо
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 18:22
Привет! Вот еще темы с ответами:

Один ActionBar дл всех активностей - Программирование Android
Всем привет! Есть ActionBar который должен выглядеть одинаково для всех активностей.Но при этом приходится прописывать реализацию методов...

Сколько активностей может быть - Программирование Android
Ребята я писал приложения, но использовал по минимуму активностей, тупо было ненужно. Мне стало интересно сколько может быть "максимально",...

Анимации открытия и закрытия активностей - Программирование Android
Для анимации перехода между активностями использовал метод overridePendingTransition(R.anim.dt,R.anim.alpha). Анимация открытия...

ListView, База данных и SimpleCursorAdapter - onItemClick срабатывает только после добавления данных - Программирование Android
Здравствуйте! Подскажите, плиз, решение проблемы новичку... есть БД... подключаюсь через SimpleCursorAdapter ... Нажатие на строке...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.11.2016, 18:22
Ответ Создать тему
Опции темы

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