Quantcast
Channel: Android*
Viewing all articles
Browse latest Browse all 531

Использование базы данных с приложением Android*

$
0
0

Аннотация

В мобильных приложениях в ряде случаев может быть полезно использование простой внутренней базы данных, такой как SQLite. В этой статье мы рассматриваем API Android* SQLite и вспомогательные классы для создания и обслуживания баз данных. Мы обсудим создание и использование заранее заполненной базы данных, а также будем использовать SQLite для создания внутренней базы данных для образца ресторанного приложения.

Содержание

Аннотация
Обзор
Образец приложения для ресторана – Little Chef.
Использование существующей базы данных
Доступ к элементам меню из базы данных ресторана
Заключение

Обзор

В Android существует встроенная поддержка базы данных SQLite. Поддерживаются все функции SQLite, предоставляется API оболочки с совместимым интерфейсом. Подробные сведения см. по приведенной ниже ссылке.
http://developer.android.com/guide/topics/data/data-storage.html#db

API Android SQLite является типичным; разработчику следует реализовать всю обработку базы данных, включая создание, управление версиями, обновления базы данных и прочие настройки. Если нужно использовать заранее заполненную базу данных SQLite, требуется дополнительная настройка.

Приведенное ниже учебное руководство содержит подробные сведения по использованию стандартного API Android SQLite.
http://developer.android.com/training/basics/data-storage/databases.html

Прямое использование API Android SQLite может привести к написанию большого количества шаблонного кода. Существует несколько библиотек Android, помогающих упростить этот процесс. Они обладают и рядом других возможностей в дополнение к удобному и эффективному использованию баз данных SQLite в приложениях Android.

SQLiteAssetHelper - одна из таких библиотек. Эта библиотека популярна в сообществе разработчиков Android. Полные сведения см. на следующем веб-сайте: https://github.com/jgilfelt/android-sqlite-asset-helper

Образец приложения для ресторана — Little Chef.

Мы будем использовать образец приложения для ресторана (Little Chef), чтобы продемонстрировать использование базы данных SQLite и библиотеки SQLiteAssetHelper library.

Это приложение позволяет пользователю просматривать различные категории меню и выбирать различные элементы.


Figure 1: A Restaurant Sample App - Little Chef

Это приложение для ресторана может быть использовано поваром или пользователем для просмотра различных категорий и элементов меню. В образце приложения используется жест прокрутки для переключения между категориями, а при выборе какого-либо элемента в меню отображаются подробные сведения.

Для сохранения всех категорий меню и подробных сведений об элементах можно использовать базу данных SQLite. В дальнейших версиях приложения можно расширить базу данных, чтобы поддерживать другие виды данных приложения: данные о продажах, о программах лояльности клиентов, индивидуальные настройки для каждого пользователя и т.д.

Использование существующей базы данных

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

Android API (например, SQLiteOpenHelper) можно использовать для заполнения первоначального набора данных при создании и инициализации базы данных. Тем не менее такой подход не всегда оптимален, особенно при большом объеме набора данных. Кроме того, не рекомендуется использовать некоторые вызовы SQLiteOpenHelperв главном потоке. В зависимости от мощности устройства пользователи могут столкнуться с длительной инициализацией и значительными задержками в работе пользовательского интерфейса при запуске. Еще один возможный подход — заранее заполнить базу данных и упаковать ее в составе ресурсов приложения.

Для образца ресторанного приложения мы создали базу данных SQLite автономно, используя API программирования python для SQLite. Существуют и клиенты с графическим пользовательским интерфейсом, позволяющие вручную добавлять данные в базы данных SQLite и редактировать эти данные. Согласно рекомендации в документации к API Android SQLite, мы добавили столбец «_id» для уникальной идентификации каждой строки. Это будет полезно при реализации абстракций поставщика содержимого и адаптера.

Для доступа к базе данных SQLite из папки assets приложения с помощью интерфейсов API Android SQLite требуется скопировать файл базы данных из папки assets в папку, соответствующую пути к базе данных приложения. Ситуация дополнительно усложняется, если нужно реализовать поддержку обновления базы данных и управления версиями.

Для образца ресторанного приложения мы используем библиотеку SQLiteAssetHelper*, чтобы получить доступ к заранее заполненной базе данных, упакованной в составе ресурсов приложения. Подробные инструкции по использованию см. в документе README для библиотеки SQLiteAssetHelper.
https://github.com/jgilfelt/android-sqlite-asset-helper

Мы создали папку databases внутри папки assets и скопировали заранее заполненный файл restaurant.sqliteв папку databases. Подробные сведения см. в следующем фрагменте кода.


package com.example.restaurant;

import android.content.Context;

	import android.database.Cursor;

	import android.database.sqlite.SQLiteDatabase;

	import android.database.sqlite.SQLiteQueryBuilder;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

/**

	* Database handler for restaurant app.

	*/

	public class RestaurantDatabase extends SQLiteAssetHelper {

	     private static final String TAG = SQLiteAssetHelper.class.getSimpleName();

	     private static final String DATABASE_NAME = "restaurant.sqlite";

	     private static final int DATABASE_VERSION = 1;

     public interface TABLES {

	         String MENU = "menu";

	         String USER = "user";

	         String CUSTOMER = "customer";

	}

     public interface MenuColumns {

	         String CATEGORY = "category";

	         String NAME = "name";

	         String DESCRIPTION = "description";

	         String NUTRITION = "nutrition";

	          String PRICE = "price";

	          String IMAGENAME = "imagename";

	     }

     public RestaurantDatabase(Context context) {

	          super(context, DATABASE_NAME, null, DATABASE_VERSION);

	     }

     public Cursor getMenuItems() {

	          SQLiteDatabase db = getReadableDatabase();

	          SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

     qb.setTables(TABLES.MENU);

	         Cursor c = qb.query(db, null, null, null, null, null, null);

	          c.moveToFirst();

         return c;

	     }

	}

Фрагмент кода 1. Использование заранее заполненной базы данных ++

Доступ к элементам меню из базы данных ресторана

При инициализации SQLiteAssetHelperавтоматически скопирует заранее заполненную базу данных ресторана из папки assets по соответствующему пути к базе данных. Последующие вызовы будут снова использовать этот экземпляр базы данных до тех пор, пока не будет запрошено обновление. В приведенном выше фрагменте кода показан метод getMenuItems, возвращающий указатели для всех элементов меню в базе данных.

В следующем фрагменте кода показано создание экземпляра базы данных и разбор элементов меню от указателя.


mDb = new RestaurantDatabase(this);

mMenuItems = new ArrayList<MenuItem>();

Set<String> categories = new HashSet<String>();


	Cursor c = mDb.getMenuItems();

		while (c.moveToNext()) {


		String category = c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.CATEGORY));

			categories.add(category);


	MenuItem menuItem = new MenuItem();


		menuItem.setCategory(category);


			menuItem.setName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NAME)));


			menuItem.setDescription(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.DESCRIPTION)));


			menuItem.setNutrition(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NUTRITION)));


			menuItem.setPrice(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.PRICE)));


			menuItem.setImageName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.IMAGENAME)));

			mMenuItems.add(menuItem);


	}


     c.close();

mCategoryList = new ArrayList<String>(categories);

Фрагмент кода 2. Доступ к элементам меню из базы данных ++

Не рекомендуется обрабатывать доступ к базе данных в главном потоке. Можно использовать SQLiteAssetHelperдля добавления дополнительных абстракций, таких как интерфейс поставщика содержимого Android.

В зависимости от требованиях к приложению и сценариев использования можно добавить в ресторанное приложение и другие возможности: поддержку обновления базы данных, управление версиями и даже поддержку серверов. При серверной реализации внутренней базы данных мы можем использовать локальную базу данных SQLite в качестве временного кеша и для возможности автономной работы.

Заключение

В этой статье мы обсудили использование базы данных SQLite в приложениях Android. Мы обсудили API Android SQLite и вспомогательные классы. Мы использовали образец ресторанного приложения для демонстрации использования заранее заполненных баз данных с библиотекой SQLiteAssetHelper.

Об авторе

Ашок Эмани (Ashok Emani) работает инженером по программному обеспечению в отделе Intel Software and Services Group. В настоящее время он занимается проектами по масштабированию систем на основе процессоров Intel® Atom™.

Примечания

ИНФОРМАЦИЯ В ДАННОМ ДОКУМЕНТЕ ПРИВЕДЕНА ТОЛЬКО В ОТНОШЕНИИ ПРОДУКТОВ INTEL. ДАННЫЙ ДОКУМЕНТ НЕ ПРЕДОСТАВЛЯЕТ ЯВНОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ЛИЦЕНЗИИ, ЛИШЕНИЯ ПРАВА ВОЗРАЖЕНИЯ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ. КРОМЕ СЛУЧАЕВ, УКАЗАННЫХ В УСЛОВИЯХ И ПРАВИЛАХ ПРОДАЖИ ТАКИХ ПРОДУКТОВ, INTEL НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ И ОТКАЗЫВАЕТСЯ ОТ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ В ОТНОШЕНИИ ПРОДАЖИ И/ИЛИ ИСПОЛЬЗОВАНИЯ СВОИХ ПРОДУКТОВ, ВКЛЮЧАЯ ОТВЕТСТВЕННОСТЬ ИЛИ ГАРАНТИИ ОТНОСИТЕЛЬНО ИХ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОБЕСПЕЧЕНИЯ ПРИБЫЛИ ИЛИ НАРУШЕНИЯ КАКИХ-ЛИБО ПАТЕНТОВ, АВТОРСКИХ ПРАВ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ.

КРОМЕ СЛУЧАЕВ, СОГЛАСОВАННЫХ INTEL В ПИСЬМЕННОЙ ФОРМЕ, ПРОДУКТЫ INTEL НЕ ПРЕДНАЗНАЧЕНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ В СИТУАЦИЯХ, КОГДА ИХ НЕИСПРАВНОСТЬ МОЖЕТ ПРИВЕСТИ К ТРАВМАМ ИЛИ ЛЕТАЛЬНОМУ ИСХОДУ.

Корпорация Intel оставляет за собой право вносить изменения в технические характеристики и описания своих продуктов без предварительного уведомления. Проектировщики не должны полагаться на отсутствующие характеристики, а также характеристики с пометками «зарезервировано» или «не определено». Эти характеристики резервируются Intel для будущего использования, поэтому отсутствие конфликтов совместимости для них не гарантируется. Информация в данном документе может быть изменена без предварительного уведомления. Не используйте эту информацию в окончательном варианте дизайна.

Продукты, описанные в данном документе, могут содержать ошибки и неточности, из-за чего реальные характеристики продуктов могут отличаться от приведенных здесь. Уже выявленные ошибки могут быть предоставлены по запросу.

Перед размещением заказа получите последние версии спецификаций в региональном офисе продаж Intel или у местного дистрибьютора.

Копии документов с порядковым номером, ссылки на которые содержатся в этом документе, а также другую литературу Intel можно получить, позвонив по телефону 1-800-548-4725 либо на сайте: http://www.intel.com/design/literature.htm

Программное обеспечение и нагрузки, использованные в тестах производительности, могли быть оптимизированы для достижения высокой производительности на микропроцессорах Intel. Тесты производительности, такие как SYSmark* и MobileMark*, проводятся на определенных компьютерных системах, компонентах, программах, операциях и функциях. Любые изменения любого из этих элементов могут привести к изменению результатов. При выборе приобретаемых продуктов следует обращаться к другой информации и тестам производительности, в том числе к тестам производительности определенного продукта в сочетании с другими продуктами.

Данный документ и описываемое в нем программное обеспечение предоставляются по лицензии и могут использоваться и распространяться только согласно условиям лицензии.

  • Developers
  • Android*
  • Android*
  • URL
  • Theme Zone: 

    Android

    Viewing all articles
    Browse latest Browse all 531


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>