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

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

Войти
Регистрация
Восстановить пароль
 
Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 338
#1

SMS рассылка контактам с базы SQLite - Программирование Android

01.02.2015, 20:00. Просмотров 444. Ответов 10
Метки нет (Все метки)

Всем доброго времени суток.
Помогите пожалуйста вытащить номера с таблицы и создать цикл для отправки SMS. Код отправки уже готов и работает. Всех благодарю за помощь. Особенно Форуму спасибо за поддержку юных разработчиков.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2015, 20:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SMS рассылка контактам с базы SQLite (Программирование Android):

Обновление базы данных sqlite - Программирование Android
Уже который день бьюсь никак не выходит Подскажите, что я делаю неверно у меня есть созданная база данных MyDb, в ней таблица status ...

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

SQLite обновление базы данных - Программирование Android
Всем привет. Использую базу данных в приложении. При обновлении программы нужно обновить базу данных в том числе, база данных хранится...

Вытащить информацию из базы данных Sqlite - Программирование Android
Здравствуйте! Пишу простенькое приложение "Справочник". В кратком что у меня есть: 3 класса: MainActivity - тут у меня расположен ListView...

Как отобразить запись из базы sqlite - Программирование Android
Имеется база, 1 активити и пару виджетов для добавления записей в базу sqlite. Вопрос такой: Как показать количество записей в базе на...

Использование готовой базы SqLite из ресурсов - Программирование Android
Здравствуйте. Мне необходимо в приложении использовать готовую базу, но для того чтобы её использовать я копирую её в то место где...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 338
03.02.2015, 07:35  [ТС] #2
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.02.2015, 10:09 #3
Kazachek, здравствуй!
Вроде, простой вопрос-то у тебя.
Я так понял, базу ты уже умеешь копировать на устройство, доступ к ней получаешь.
В работе я использую немного исправленный https://github.com/jgilfelt/android-...setHelper.java. Там есть пара недоработок.
Дальше дописываю в другом классе метод (доработаешь по вкусу):
Java
1
2
3
4
5
    public Cursor getCursor(String sql) {
        if (db == null)
            db = getReadableDatabase();
        return db == null ? null : db.rawQuery(sql, null);
    }
В другом классе вызов:
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
    new Load().execute();
 
    ...
 
    public class Load extends AsyncTask<Void, String, Void> {
        private DatabaseHelper dbHelper;
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
 
            showProgressDialog(true);
            dbHelper = new DatabaseHelper(context);
        }
 
        @Override
        protected Void doInBackground(Void... params) {
            publishProgress("Загрузка");
            try {
                Cursor cursor = dbHelper.getCursor("SQL-запрос");
                if (cursor != null) {
                    if (cursor.moveToFirst()) {
                        arrList = new ArrayList<Класс>();
                        do {
                            Класс объект = new Класс(cursor);
                            Действия с объектом;
                        } while (cursor.moveToNext());
                    }
                    cursor.close();
                }
            } catch (SQLiteException e) {
                e.printStackTrace();
            } finally {
                dbHelper.close();
            }
 
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(null);
 
                        for (Класс объект : arrList) {
                             твои действия;
                        }
            showProgressDialog(false);
        }
 
        @Override
        protected void onProgressUpdate(String... progress) {
            if (progress != null && progress.length > 0)
                showProgressMessage(progressDialog, progress[0]);
        }
    }
Там ещё много надо дописать, разберёшься. Например, создание диалогового окна и вывод сообщений в нём (ProgressDialog).

Добавлено через 32 минуты
Забыл дописать, что в классе для работы с курсором требуется написать что-то типа такого:
Java
1
2
                this.id = c.getInt(c.getColumnIndex("id"));
                this.name = c.getString(c.getColumnIndex("name"));
Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 338
03.02.2015, 12:17  [ТС] #4
Цитата Сообщение от CoolMind Посмотреть сообщение
Я так понял, базу ты уже умеешь копировать на устройство, доступ к ней получаешь.
Добрый день,
Огромное спасибо что откликнулись, я научился создавать базу внутри активити, но не знал что можно использовать уже готовую. Для меня главное это чтоб база заполнялась. Что я хочу сделать:
1. Отправить сообщение 3 номерам с базы.
2. Принять от них ответ и записать в базу.
3. Отправить второе сообщение, если есть ответ на первое.

Мне не нужно даже видеть что за сообщения и как, главное чтоб все записалось в бд и я мог потом постфактум проанализировать базу с исходящими и входящими номерами.

Научился отправлять и принимать сообщения.
Помогли создать базу если ее нет, и записать туда сообщения, но все равно я не уверен что там все работает, так как визуально базу не вижу((

Следующим шагом посчитал, создать базу и отправить сообщения 3 номерам которые записаны в базе и принять и записать ихнее сообщение в базу.

Приложение и телефон будут на подобии коммутатора и биллинга.

Можно ли это сделать? Если я не занимаю ваше время, можете время от времени в свободное время помочь мне?
Думаю многим будет полезна данная информация. Спасибо

Добавлено через 47 секунд
Если подскажите с чего начать и куда двигаться был бы очень благодарен, возможно я не с того начал все
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.02.2015, 14:51 #5
Kazachek, пожалуйста!
По поводу подключения к существующей БД можно почитать, например, здесь: Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде (последнее сообщение даёт ссылку на пример). Правда, я там не совсем согласен, например, при копировании БД на устройство нет проверки существования папки и её создания. Впрочем, этот баг встречается у многих. Почитайте несколько разных источников, чтобы для себя решить. Я долго выбирал движки БД, в итоге склонился к SQLiteAssetHelper.
В своих проектах я почти не использую запись в БД, разве что её автообновление. Дело в том, что копить данные у пользователя (которые он сам вводит туда) - целая проблема. Например, при удалении программы или при очистке данных через настройки вся накопленная информация мгновенно исчезает. А делать это приходится периодически (по крайней мере, у себя на устройствах во время отладки). При изменении структуры БД (а пока программа развивается, структура будет тоже меняться) придётся писать скрипты для апгрейда БД так, чтобы не потерять пользовательские данные. Поля добавлять, названия полей менять и т.п. Следовательно, данные в БД теряются ещё проще, чем фотографии и документы.
Но если уж вы решили записывать в БД, то вот пример (штудировал http://habrahabr.ru/post/190876/).
Кстати, пока искал статью, нашёл ещё что-то: http://habrahabr.ru/post/146453/.
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
        private boolean updateTable() {
            String sqlInsert, sqlUpdate, sqlDelete;
            SQLiteStatement stmtInsert, stmtUpdate, stmtDelete;
 
            db.beginTransaction();
            try { // try - finally - обязательно. Если запись сломается, транзакцию надо будет закрыть.
                        sqlInsert = "INSERT INTO tbl (id, name, phone) "
                                + "VALUES (?, ?, ?)";
                        sqlUpdate = "UPDATE tbl SET name = ?, phone = ? "
                                + "WHERE id = ?";
                        stmtInsert = db.compileStatement(sqlInsert);
                        stmtUpdate = db.compileStatement(sqlUpdate);
 
                                    stmtInsert.bindLong(1, id);
                                    stmtInsert.bindString(2, name);
                                    stmtInsert.bindString(3, phone);
                                    stmtInsert.execute();
 
                                    stmtUpdate.bindString(1, name);
                                    stmtUpdate.bindString(2, phone);
                                    stmtUpdate.bindLong(3, id);
                                    stmtUpdate.execute();
 
                    db.setTransactionSuccessful();
                }
            } finally {
                // В случае сбоя во время обновления не забудем закрыть транзакцию, иначе БД будет заблокирована.
                db.endTransaction();
            }
Кроме того, желательно не споткнуться о наши любимые null'ы. Ява очень их любит. Поэтому, если в данных ожидается null, надо несколько переписать методы:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        private void bindLong(SQLiteStatement stmt, int index, Long value) {
            if (value == null)
                stmt.bindNull(index);
            else
                stmt.bindLong(index, value);
        }
 
        private void bindString(SQLiteStatement stmt, int index, String value) {
            if (value == null)
                stmt.bindNull(index);
            else
                stmt.bindString(index, value);
        }
Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 338
03.02.2015, 14:56  [ТС] #6
Можно ли как то реализовать так, чтоб база была не самом приложении а на локальном компьютере?, потому что если подключится через интернет то не знаю на сколько запросы будут обрабатываться быстро, чтоб не накопилась очередь.

Согласен с вами что если база будет на другом месте это супер. Даже мне анализировать будет легче. А так, я боюсь что то накосячить в коде.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.02.2015, 15:21 #7
Kazachek, честно говоря, не понял вас. Вы хотите, чтобы устройство подключалось к компьютеру и читало оттуда базу? Вряд ли такое возможно. На мой взгляд, есть всего 2 пути: либо всё делается через БД, либо через Интернет-запросы. Можно и совмещать подходы.
Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 338
03.02.2015, 16:12  [ТС] #8
Цитата Сообщение от CoolMind Посмотреть сообщение
либо через Интернет-запросы
Как думаете приложение и интерент справится за 4 секунды обработать запрос? Можно ли как то постоянно держать соединение, чтоб каждый раз не соединятся что ли. Просто я прочитал и узнал что на одну смску дается 10 секунд, и после него придет вторая смска.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.02.2015, 23:13 #9
Kazachek, в принципе, возможен вариант, что у устройства совсем не будет доступа в Интернет или будет очень редко. Потому можно организовать локальную БД, но при получении доступа в Интернет просто её синхронизировать с сервером.
Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 338
04.02.2015, 07:43  [ТС] #10
Огромное спасибо. Вы предложили суперский вариант.
Тогда я постараюсь создать базу при запуске приложения, с проверкой сущевствования базы.
2) Подключу коды приема и отправки сообщений
3) Научусь сделать отправку по условиям и при приеме по уловиям проверив заносить в базу
4) Попытаюсь создать синхронизацию

Правильно ли описал все шаги?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
04.02.2015, 09:33 #11
Kazachek, приятно слышать!
Думаю, да. Конечно, всё окажется в итоге сложнее, но общая схема примерно такая, как вы описали.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2015, 09:33
Привет! Вот еще темы с ответами:

Где хранится файл базы данных SQLite на устройстве? - Программирование Android
Здравствуйте друзья! Где храниться файл базы данных SQLite на устройстве или может этот файл создается автоматически при загрузке...

При переносе приложения на карту памяти где хранятся SharedPreferences, SQLite базы и тп ? - Программирование Android
Где хранятся настройки SharedPreferences, SQLite базы и тд? Нужно ли что то дополнительно прописывать или при переносе на карту памяти...

Доступ к контактам Windows 8 - Программирование
Есть примеры как получить доступ и вытянуть данные из социальных контактов (фича &quot;люди&quot;). А как получить доступ к обычным контактам windows...

Постолбцовое отображение данных из базы данных SQLite - Программирование Android
Уважаемые форумчане, помогите пожалуйста. Необходимо вывести данные из таблицы базы данных в TextView. Вот код, когда в TextView...


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

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

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