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

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

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

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

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

Наслоение активностей
Всё ниже: private GridView.OnItemClickListener gridviewOnItemClickListener =...

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

ActionBar переход активностей
как сделать что бы при выборе элемента tab переходило на другую активность ...

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

10
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
01.11.2016, 14:31 #2
В принципе так и делается.
1
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
01.11.2016, 15:17 #3
если не очень заботитесь о расходе памяти, можете сделать синглтон, он живет все время пока аппликация работает и к нему можно обратиться с любого класса, назвать его нетворкменеджер, в классе аппликации или в мейн активити инициализировать, прописать в нем все функции которые нужны, и в нужных местах проекта просто вызывать его, например так: NetworkManager.getInstance().getData().

если да заботитесь о памяти, то просто создаете класс, прописываете в нем констрактор и паблик функции, в каждом месте где нужно к нему обратиться создаете его заново, обращаетесь к функции, получаете информацию с сервера через него и убиваете его по ненадобности
1
Mazilo
36 / 36 / 72
Регистрация: 31.10.2014
Сообщений: 206
01.11.2016, 15:45  [ТС] #4
shavuz, а если я в onCreate - открыл соединение, работаю с базой, перехожу на следующие активности, где так же открываю соединение с базой, как-то изменяю ее, а в onDestroy() - закрываю подключение? Или же лучше закрывать подключение на onStop()?
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
01.11.2016, 15:59 #5
по этому нужен сингл тон, так легче управлять и ему можно передать когда закрыть, по правельному будет открыть когда нужно обратиться к бд и закрыть после получения даты
0
Mazilo
36 / 36 / 72
Регистрация: 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) {
        }
    }
}
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
01.11.2016, 16:50 #7
Лучший ответ Сообщение было отмечено Mazilo как решение

Решение

на счет инстанс не уверен, правельно вот так
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)
дальше. я бы не советовал делать дбХелпер класс внутри синглтона, лучше вынести его отдельно, пусть себе сам по себе живет. и еще. вы держите контекст в этом классе, это мемори лик, получается активити или фрагмент всегда прикреплен через контекст к синглтону. вообще лучше не держать контекст, убрать его вообще из синглтона и из инит, тогда вообще не нужна будет функция инит, его не надо будет инициализировать, а контекст передавать через функции опен,и еще где нужно будет.
1
Mazilo
36 / 36 / 72
Регистрация: 31.10.2014
Сообщений: 206
01.11.2016, 16:59  [ТС] #8
shavuz, понял. А если нужно сделать какое-то действие с базой, я должен каждый раз ее открывать методом open(), выполнять необходимое действие, допустим getAllData(), и после этого незамедлительно ее закрывать методом close()? Или можно в начале метода onCreate() открыть, а в конце закрыть?
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
01.11.2016, 17:07 #9
Зачем держать все время дб открытой? есть этому причина? открыли, получили, закрыли))
1
Mazilo
36 / 36 / 72
Регистрация: 31.10.2014
Сообщений: 206
01.11.2016, 17:15  [ТС] #10
shavuz, все, понял, спасибо
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
01.11.2016, 18:22 #11
В сети куча примеров, вот почитайте на досуге
http://developer.alexanderklimov.ru/android/sqlite/android-sqlite.php
http://www.journaldev.com/9438/andro...ample-tutorial
http://www.tutorialspoint.com/android/android_sqlite_database
0
01.11.2016, 18:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 18:22
Привет! Вот еще темы с решениями:

Анимации открытия и закрытия активностей
Для анимации перехода между активностями использовал метод...

Один ActionBar дл всех активностей
Всем привет! Есть ActionBar который должен выглядеть одинаково для всех...

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

Усложненная настройка анимаций переходов активностей
Здравствуйте, форумчане. Хочу сделать анимации активностей как на видео...


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

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

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