Где / как реализовать SQLiteDatabase и AsyncTask в TabActivity - PullRequest
3 голосов
/ 01 апреля 2012

Я в основном закончил разработку приложения (самое первое!), За исключением реализации какого-либо механизма сохранения данных.Некоторое время назад я изучил параметры и решил, что SQLiteDatabase лучше всего подходит, но мне было трудно обдумать, как именно его реализовать, поэтому я оставил его до завершения остальной части программы.С тех пор я только что протестировал его, вводя все значения каждый раз, когда запускаю его на своем устройстве.

Приложение запускается практически без экрана.Пользователь добавляет игроков (через меню и диалог).Как только список игроков будет завершен, пользователь нажимает «Сохранить» в диалоге.Затем таблица строк для каждого игрока динамически раздувается и включает в себя кнопку, несколько изображений и текстовое представление, все из которых отображают различные атрибуты каждого игрока.Это не имеет большого значения для моего вопроса.

Итак, мое приложение будет просто отслеживать объекты Player.У меня есть объект базы данных, созданный с использованием этого в качестве руководства: http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/, замена "контактов" на "игроков" по большей части.

Что мне трудно понять, так это где именно реализовать "сохранение "и" загрузка "каждого объекта проигрывателя, а также действия в основных методах Activity onCreate, onResume и onStop.Я уже много часов занимаюсь этим и понял, что должен также реализовать AsyncTask, но это еще сложнее, и я не могу даже загрузить базовые данные в свой мозг, не говоря уже о том, чтобы делать это асинхронно.

Есть хороший пример того, как реализовать AsyncTask и SQLiteDatabase в книге, которую я читаю, под названием «Android для программистов: подход, управляемый приложениями» в серии разработчиков Deitel, но в своем примере они используютCursorAdapter в ListActivity, поэтому я не знаю, как его применить в моей ситуации.(У меня есть TabActivity, что я объяснил выше только для вкладки «Просмотр игроков».)

Имеет смысл добавлять игроков в базу данных, когда пользователь нажимает «сохранить» в «Добавить игроков»Диалог ", но я не понимаю, куда перезагружать объекты проигрывателя, а также где заново заполнять строку таблицы каждого проигрывателя.

Извините, я не выкладываю код, чтобы быть более точным, но это скорее общий вопрос, и я бы не стал публиковать все свое приложение, так как оно длиной около тысячи строк.Буду признателен за любую помощь, я стараюсь не публиковать здесь каждую мелочь, но эта штука слишком долго меня расстраивала!

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

У меня такая же книга, как и у вас.Я последовал за приложением AddressBook (которое работает с DatabaseConnector), и оно мне очень помогло.Теперь я могу поделиться с вами своим кодом (я следовал другому руководству по Android Hive для входа в систему / регистрации с помощью сценариев SQL / PHP), а затем успешно перенес его на использование ASyncTask.Тем не менее, часть, над которой я сейчас работаю, переопределяет локальную базу данных SQLite: мне нужно получить ее для хранения электронной почты зарегистрированного пользователя и т. Д., Чтобы я мог отобразить эту информацию на экране.Кроме того, у меня есть страница, на которой пользователь может отправить дополнительную информацию (возраст, национальность и т. Д.), И приложение затем сохранит эти данные на сервере SQL вместе с остальными данными своей учетной записи

Так что, как я уже сказалЯ был бы рад поделиться этим кодом с вами, но это не совсем то, что вы ищете, поскольку это сетевая база данных, а не локальная база данных SQLite.У него будет аспект SQLite db, я просто не закончил эту часть.

Наконец, я предлагаю AddressBook из вашей книги Deitel, это действительно помогло мне.

0 голосов
/ 01 апреля 2012

AsyncTasks - боль, когда дело доходит до изменения конфигурации (например, ротация телефона), и легко создавать утечки памяти. Вы должны скорее использовать Loader. Не обращайте внимания на название, оно также может использоваться для записи данных - в основном для каждой операции, выполняемой в фоновом режиме. Точнее, я бы использовал AsyncTaskLoader , а в методе loadInBackground() я бы добавил помощник по базе данных, чтобы выбрать или вставить данные с ним. Помощник по базам данных должен быть расширением SQLiteOpenHelper, и его создание может выполняться только один раз, поэтому я бы предложил поместить его в контекст приложения и получить оттуда ссылку.

Надеюсь, это поможет.

...