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

    Latest Images

    Trending Articles


    Vimeo 11.6.0 by Vimeo.com, Inc.


    Vimeo 11.8.2 by Vimeo.com, Inc.


    Patama Quotes – Tanga love tagalog quotes


    Inggit Quotes and Taray Quotes


    Re:Mutton Pies (lleechef)


    FORECLOSURE OF REAL ESTATE MORTGAGE


    Vimeo Create - Video Maker & Editor 1.5.2 by Vimeo Inc


    Vimeo 10.7.1 by Vimeo.com, Inc.


    Vimeo 11.6.1 by Vimeo.com, Inc.


    Doodle Jump 3.11.34 by Lima Sky LLC


    Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


    Doodle Jump 3.11.34 by Lima Sky LLC


    Tagalog God Quotes to inspire you


    “Sayo lang ang tingin”


    RE: Mutton Pies (frankie241)


    Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


    Vimeo 10.7.0 by Vimeo.com, Inc.


    Sapos para colorear


    FORTUITOUS EVENT


    Doodle Jump 3.11.35 by Lima Sky LLC



    Latest Images

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