2012-04-01 1 views
3

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

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

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

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

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

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

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

ответ

0

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

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

+0

Привет, спасибо, что ответ. Я не беспокоюсь о том, что телефон вращается, так как он установлен на портрет в манифесте. Я больше беспокоюсь о том, где положить каждый фрагмент кода. Я знаю, где «сохранять» вещи, но я не знаю, как перезагружать все каждый раз, когда пользователь перезагружает приложение, особенно в отношении onCreate(), onResume(), onStop() и т. Д. Эти методы я до сих пор Полностью понять, когда дело доходит до сохраненной информации, восстановления состояния и т. д. –

+0

Кроме того, я проверил связанные с вами документы AsyncTaskLoader. В нем говорится, что они были представлены в Android 3.0, поэтому я не могу их использовать, так как мое приложение (и телефон) предназначено для API 8+. –

+1

Вы можете! Они находятся в пакете совместимости, поэтому вы можете использовать их для API 7+, если я хорошо помню –

1

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

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

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

+0

Спасибо за ответ. Вы правы, меня не интересует сетевая база данных, но локальная, как только вы ее поднимете, поможет мне очень сильно, так как это звучит так же, как то, что я делаю. Каждый объект Player в моем приложении отслеживает все, как ваше приложение отслеживает возраст, национальность и т. Д. Я пытался использовать книгу Deitel для своего приложения, но способ, которым они объясняют это, «мы использовали ListView, и он автоматически делает все, потому что это ListActivity. " Таким образом, это не помогает мне для моего приложения. Книга хороша во многих отношениях, но плохая в других, как это. –

+0

Согласен. Я попытаюсь опубликовать дополнительную информацию о том, как я работаю с моим локальным SQLite dB позже сегодня, не могли бы вы изменить этот пост или оставить еще один ответ? – Davek804

+0

Скорее всего, из-за ограничения персонажа, чтобы отказаться от другого ответа? Какой бы ни работал, я в отчаянии. –