Новости

Parse - хмарна служба для Android-додатків

  1. попередні зауваження
  2. Інформаційна панель Parse
  3. Малюнок 1. Інформаційна панель Parse
  4. Об'єкти даних Parse
  5. Лістинг 1. Приклад ParseObject
  6. Лістинг 2. ParseObject: деякі підтримувані типи даних
  7. редагування ParseObject
  8. ParseObject: короткий опис
  9. Користувачі, ролі і ACL Parse
  10. користувачі Parse
  11. Анонімні користувачі в Parse
  12. Лістинг 3. ParseUser - реєстрація
  13. Лістинг 4. ParseUser - вхід
  14. Лістинг 5. ParseUser - отримання відомостей про поточного користувача
  15. Лістинг 6. ParseUser - скидання поточного користувача (вихід)
  16. Лістинг 7. Застосування ParseACL для дозволу доступу
  17. Лістинг 8. Установка ACL за замовчуванням
  18. Об'єкти даних Parse в хмарі
  19. Остерігайтеся блокування системного потоку!
  20. Лістинг 9. Збереження ParseObject в фоновому режимі
  21. Лістинг 10. Збереження у фоновому режимі зі зворотним викликом
  22. Отримання об'єктів даних із хмари
  23. витяг ParseObjects
  24. Лістинг 11. Витяг (безумовне)
  25. Лістинг 12. Витяг об'єкта при необхідності
  26. Пошук об'єктів даних в хмарі
  27. Лістинг 13. Використання ParseQuery для отримання заданого ParseObject
  28. Лістинг 14. Використання ParseQuery для всіх об'єктів ParseObjects заданого класу
  29. Лістинг 15. Використання ParseQuery для отримання заданих об'єктів ParseObject
  30. Лістинг 16. Використання ParseQuery для підрахунку потрібних об'єктів ParseObject
  31. Лістинг 17. Упорядкування результатів запиту
  32. Лістинг 18. Управління CachePolicy
  33. Видалення об'єктів даних
  34. Лістинг 19. Видалення об'єкта Parse з хмари
  35. Робота з файлами
  36. Лістинг 20. Збереження ParseFile
  37. Лістинг 21. Зв'язування ParseFile з ParseObject
  38. Лістинг 22. Витяг ParseFile
  39. Висновок
  40. Ресурси для скачування

Зберігання в хмарі і витяг облікових записів користувачів, об'єктів даних і файлів Android-додатки

Мобільний SDK Parse надає API і служби на основі хмари для додатків на платформах iOS, Android і Windows®. Крім того, SDK Parse забезпечує API JavaScript і REST. За допомогою API Parse можна дуже швидко і з мінімальними зусиллями робити мобільні додатки "хмарними". Мобільний додаток, інтегроване з API Parse, може зберігати об'єкти даних і файли на хмарі Parse, відправляти і приймати повідомлення, керувати користувачами, обробляти дані про місцезнаходження і працювати з платформами соціальних мереж, такими як Twitter і Facebook. Коли мобільний додаток потрібно масштабувати, SDK Parse забезпечує повну еластичність хмарної платформи.

попередні зауваження

Я припускаю, що читач вже знайомий з основами програмування мобільних додатків за допомогою JSON, Android і Eclipse. Перш ніж читати далі, зайдіть на Parse.com і визначте свій додаток. Дотримуйтесь простим інструкціям, починаючи від сторінки реєстрації.

Ця стаття знайомить читача з основними класами користувачів, об'єктів даних і файлів API Parse. Він дізнається, як працювати зі списками управління доступом (ACL), як виконувати операції CRUD над об'єктами даних і як зберігати файли в хмарі Parse і витягувати їх. Приклади будуються на SDK Parse для Android (див. Розділ ресурси ).

Інформаційна панель Parse

Інформаційна панель Parse допомагає розробникам керувати програмами. Вона містить загальні та спеціальні параметри використання API і файлів, а також параметри повідомлень. Через цю панель здійснюється управління ключами і параметрами налаштування додатків. Крім того, панель відображає оглядач даних, в якому розробники можуть переглядати і навіть редагувати об'єкти, що зберігаються в хмарі Parse. Оглядач даних дуже корисний для цілей налагодження. На малюнку 1 представлений скріншот інформаційної панелі Parse.

Малюнок 1. Інформаційна панель Parse

Додатки проходять перевірку автентичності з використанням ідентифікатора додатка і ідентифікатора клієнта. Щоб отримати ці ідентифікатори, необхідно зареєструвати свій додаток за допомогою інформаційної панелі Parse. Ці ключі знадобляться при ініціалізації бібліотеки Parse в своєму додатку.

Об'єкти даних Parse

У Parse дані представлені за допомогою контейнера ParseObject, що містить пару ім'я-значення. У ParseObject можна зберігати будь-які JSON-сумісні дані, як показано в лістингу 1.

Лістинг 1. Приклад ParseObject
ParseObject myParseObject = new ParseObject ( "MyObject"); // Ім'я класу myParseObject.put ( "name", "C. Enrique Ortiz"); myParseObject.put ( "twitterHandle", "eortiz"); myParseObject.put ( "followers", 123456);

При створенні екземпляра ParseObject отримує ім'я класу classname. В лістингу 1 classname - це MyObject. Імена класів аналогічні іменам таблиць в реляційної базі даних, а об'єкти Parse з одного і того ж класу - рядкам таблиці.

ParseObject надає методи, аналогічні Java-класу Map, такі як put, get та remove, а також ряд інших методів, специфічних для ParseObject.

Ключі імені ParseObject повинні бути алфавітно-цифровими; використовуйте для них "горбатий регістр". Значення можуть бути даними будь-якого типу, які можна зберігати в JSON: числа, рядки, логічні значення, масиви, значення JSONObject.NULL, об'єкти JSONObject і масиви JSONArray. Інші типи даних, підтримуваних ParseObject - Date Java і масиви byte []. Об'єкт ParseObject може містити і інші об'єкти ParseObject.

У лістингу 2 показані деякі підтримувані ParseObject типи даних.

Лістинг 2. ParseObject: деякі підтримувані типи даних
// Байт-масив byte [] byteArray = {1, 2, 3, 4, 5}; // Дата Date d = new Date (); // java.util.Date // Число int number = 21; // Рядок String name = "Enrique"; // JSONArray - будь-яке поєднання об'єктів JSONObject, JSONArray, рядків, логічних // значень, цілих чисел, довгих цілих чисел, чисел подвійної довжини і значень null // або NULL. JSONArray jArray = new JSONArray (); jArray.put (number); jArray.put (name); // JSONObject JSONObject jObject = new JSONObject (); try {jObject.put ( "number", number); jObject.put ( "name", name); } Catch (JSONException e) {e.printStackTrace (); } // ParseObject ParseObject pObject = new ParseObject ( "MyObject"); // Ім'я класу pObject.put ( "myByteArray", byteArray); pObject.put ( "myDate", d); pObject.put ( "myString", name); pObject.put ( "myNumber", number); pObject.put ( "myJsonArray", jArray); pObject.put ( "myJsonObject", jObject); pObject.put ( "myNull", JSONObject.NULL);

Код, наведений в лістингу 2 , Створює ParseObject, який зберігається як об'єкт в хмарі Parse. Багато об'єктів MyObject одного і того ж класу зберігаються як рядки об'єктів даних ParseObject, які можна зберігати в хмарному сховищі Parse, запитувати, редагувати і видаляти. Дані можна зберегти навіть тоді, коли додаток знаходиться в автономному режимі - бібліотека Parse просто збереже їх локально до відновлення з'єднання з мережею.

редагування ParseObject

Ті, хто знайомий з розробкою мобільних додатків, знають, що довгі операції, наприклад, операції по мережі, зазвичай мають виконуватися у фоновому режимі, в робочому потоці, а не в основному потоці призначеного для користувача інтерфейсу системи. Це запобігає блокуванню основного потоку і вплив цих операцій на чуйність інтерфейсу користувача. Нижче я покажу, як Parse працює у фоновому режимі при збереженні, видаленні і пошуку об'єктів. Поки ж розглянемо наступний синхронний метод remove (), який використовується для видалення ключа з об'єкта Parse:

pObject.remove ( "myNumber"); // Видалення з pObject поля / ключа myNumber

Після видалення / додавання полів або редагування існуючого поля можна зберегти (або відновити) об'єкт даних в хмарі, викликавши один з методів save ... () ParseObject, про які я розповім нижче.

ParseObject: короткий опис

ParseObject - це об'єкт даних в хмарі Parse. Він надає методи для додавання пар ім'я-значення, перевірки наявності даного ключа і видалення або вилучення з сервера заданого об'єкта ParseObject. Крім того, ParseObject дозволяє використовувати різні методи get ... () і put ... () для маніпуляції даними об'єктів ParseObject, злиття об'єктів ParseObject, збереження об'єктів ParseObject на сервері і т.п.

Користувачі, ролі і ACL Parse

Перш ніж я покажу, як виконувати операції CRUD над об'єктами Parse, читач повинен дещо дізнатися про користувачів, ролях і списках управління доступом (ACL) Parse. Всі три поняття дуже важливі для захисту об'єктів даних програми.

користувачі Parse

Клас ParseUser представляє користувача і забезпечує функціональність облікового запису користувача в додатку Parse. З кожним додатком Parse пов'язані користувачі. ParseUser - це об'єкт ParseObject, але з додатковими властивостями імені користувача, пароля і адреси електронної пошти. Можна додати будь-які додаткові дані, які ви вважаєте потрібними.

Анонімні користувачі в Parse

Анонімний користувач в Parse - це користувач без імені і пароля. Анонімні користувачі корисні для тих мобільних додатків, яким не потрібна перевірка достовірності користувача. Анонімні користувачі можуть створювати об'єкти даних, але такі об'єкти живуть недовго і стають недоступними після виходу анонімного користувача.

Користувачі можуть зареєструватися в додатку Parse, як показано в лістингу 3.

Лістинг 3. ParseUser - реєстрація
ParseUser user = new ParseUser (); user.setUsername ( "eortiz"); user.setPassword ( "123456"); user.setEmail ( "[email protected]"); user.put ( "userType", "Author"); // додавання ще одного поля // Виклик асинхронного фонового методу реєстрації user.signUpInBackground (new SignUpCallback () {public void done (ParseException e) {if (e == null) {// Успішно. Доступ до програми дозволений.} Else { // Відмова ...}}});

Значення username і email повинні бути унікальними. Якщо ім'я користувача або адресу електронної пошти вже використовується, реєстрація завершиться відмовою. Потрібен механізм для повідомлення користувача, якщо одне з полів не проходить, а також процес повторної спроби.

Через високий рівень техніки увійти в додаток, як показано в лістингу 4.

Лістинг 4. ParseUser - вхід
ParseUser.logInInBackground ( "eortiz", "123456", new LogInCallback () {public void done (ParseUser user, ParseException e) {if (user! = Null) {// Успішно. Доступ до програми дозволений.} Else {// відмова}}});

Відомості про користувача можна відредагувати, викликавши ParseUser.save (). Зауважте, однак, що тільки власник ParseUser може змінювати його зміст; для всіх інших це дані тільки для читання.

Parse записує увійшов в систему користувача в тимчасову пам'ять. Можна запитати ім'я поточного користувача, викликавши ParseUser.currentUser (). Метод currentUser дозволяє швидко отримати відомості про поточного користувача, так що якщо поточний користувальницький сеанс не активний, досить запросити облікові дані. У лістингу 5 показано, як витягти відомості про поточного користувача Parse

Лістинг 5. ParseUser - отримання відомостей про поточного користувача
ParseUser currentUser = ParseUser.getCurrentUser (); if (currentUser! = null) {// поточний користувач вже перевірений} else {// поточний користувач не перевірений, запит облікових даних}

Скидання поточного користувача

Можна скинути поточного користувача Parse, викликавши ParseUser.logOut (), як показано в лістингу 6.

Лістинг 6. ParseUser - скидання поточного користувача (вихід)
ParseUser.logOut (); // статичний метод

ACL Parse

ACL - це список дозволів доступу (або елементів управління), пов'язаних з об'єктом даних. Клас ParseACL дозволяє визначити дозволу для даного об'єкта ParseObject. За допомогою ACL можна визначити доступ public до об'єктів даних свого застосування і обмежити доступ певними користувачами або групами користувачів (за допомогою ролей). У лістингу 7 наведено приклад застосування ACL Parse.

Лістинг 7. Застосування ParseACL для дозволу доступу
// Визначення користувача Parse ParseUser user = new ParseUser (); user.setUsername (username); :: // Визначення ACL для читання і запису ParseACL rwACL = new ParseACL (); rwACL.setReadAccess (user, true); // дозволити користувачеві читання rwACL.setWriteAccess (user, true); // дозволити користувачеві запис:: // Визначення об'єкта Parse і його ACL ParseObject gameObject = new ParseObject ( "Game"); gameObject.setACL (rwACL); // дозволити користувачеві читання / запис в gameObject gameObject.saveInBackground (); // Збереження об'єкта з ACL в хмарі:: // Можна визначити загальнодоступний ACL, який надає доступ public до об'єкта ParseACL publicACL = new ParseACL (); publicACL.setPublicReadAccess (true); publicACL.setPublicWriteAccess (true); gameObject.setACL (publicACL); // дозволити читання / запис public gameObject.saveInBackground (); // Збереження об'єкта з ACL в хмарі

Можна також визначити ACL за замовчуванням для всіх новостворюваних об'єктів. У лістингу 8 наведено ACL за замовчуванням, який можна зробити загальнодоступним для операцій читання і запису, як це визначено оператором publicACL в лістингу 7.

Лістинг 8. Установка ACL за замовчуванням
// Установка ACL за замовчуванням, щоб робити все новостворювані об'єкти загальнодоступними ParseACL.setDefaultACL (publicACL, true);

Хоча це тут не показано, можна також використовувати клас ParseRole для дозволу доступу групам користувачів.

Тепер подивимося, як об'єкти даних Parse зберігаються в хмарі Parse і витягується з нього.

Об'єкти даних Parse в хмарі

Коли об'єкти ParseObject створені і заповнені, їх можна зберегти в хмарі Parse. Насправді збереження об'єктів даних в хмарі Parse - одна з найпростіших речей, які можна робити в Parse; Parse повністю приховує складності, пов'язані з поданням даних, маршалинга, встановленням мережевий зв'язку і транспортуванням і т.п. Потрібно буде використовувати допоміжні методи для перетворення примірників об'єктів даних в ParseObject і назад, а також вирішити, чи направити операцію Parse в свій власний потік або використовувати метод збереження у фоновому режимі.

Остерігайтеся блокування системного потоку!

Нагадаємо, що в мобільних додатках довгі операції, такі як операції з мережею, файлами або довгі обчислення, не слід виконувати в основному системному потоці. Їх краще виконувати в окремому робочому потоці. Блокування системного потоку негативно позначиться на реакції UI додатки і може привести до його примусового закриття.

ParseObject надає два види методів збереження: save () і saveInBackground (). saveInBackground () - це рекомендований метод збереження, так як він виконує операцію збереження в своєму власному робочому потоці. Якщо ви вирішите використовувати синхронної метод save (), то майте на увазі, що самі несете відповідальність за те, щоб викликати цей метод в своєму власному робочому потоці, щоб уникнути блокування призначеного для користувача інтерфейсу.

У лістингу 9 наведено код збереження об'єкта даних Parse в фоновому режимі.

Лістинг 9. Збереження ParseObject в фоновому режимі
// ParseObject ParseObject pObject = new ParseObject ( "ExampleObject"); pObject.put ( "myNumber", number); pObject.put ( "myString", name); pObject.saveInBackground (); // асинхронний, без зворотного виклику

У лістингу 10 наведено код збереження об'єкта даних Parse в фоновому режимі зі зворотним викликом.

Лістинг 10. Збереження у фоновому режимі зі зворотним викликом
pObject.saveInBackground (new SaveCallback () {@Override public void done (ParseException ex) {if (ex == null) {isSaved = true;} else {// Відмова isSaved = false;}}});

Є такі варіанти методу save ... ():

  • saveAllinBackground () зберігає ParseObject зі зворотним викликом або без нього;
  • saveAll (List <ParseObject> objects) зберігає список об'єктів ParseObjects;
  • saveAllinBackground (List <ParseObject> objects) зберігає список об'єктів ParseObjects в фоновому режимі;
  • saveEventually () дозволяє зберегти об'єкт даних на сервері в певний момент часу в майбутньому; використовуйте цей метод, якщо хмара Parse недоступно.

Після успішного збереження ParseObject в хмарі йому присвоюється унікальний ідентифікатор об'єкта. Цей ідентифікатор дуже важливий, оскільки він однозначно ідентифікує екземпляр ParseObject. Ідентифікатор об'єкта можна використовувати, наприклад, для визначення того, що об'єкт був успішно збережений в хмарі, для вилучення та оновлення примірника об'єкта Parse і для видалення конкретного ParseObject.

Отримання об'єктів даних із хмари

У цьому розділі розглядаються методи запиту і отримання об'єктів даних, що зберігаються в хмарі Parse. Можна запросити один ParseObject по object-ID або зробити запит одного або декількох об'єктів Parse за допомогою атрибутів. Якщо ParseObject вже є, його вміст можна оновлювати або синхронізувати, витягуючи останні значення з сервера. Ми розглянемо всі ці варіанти в наступних прикладах.

витяг ParseObjects

Для вилучення об'єкта даних із хмари Parse використовуйте метод ParseObjectfetch () або fetchInBackground (), як показано в лістингу 11.

Лістинг 11. Витяг (безумовне)
// ParseObject ParseObject pObject = new ParseObject ( "ExampleObject"); :: // Безумовне витяг ParseObject try {pObject.fetch (); } Catch (ParseException e) {e.printStackTrace (); } // Безумовне витяг ParseObject за допомогою Callback pObject.fetchInBackground (new GetCallback () {@Override public void done (ParseObject obj, ParseException ex) {if (ex == null) {// Успішно} else {// Помилка}} });

Об'єкт можна витягувати і тільки в разі потреби; наприклад отримати об'єкт Parse, що має залежні об'єкти Parse, як показано в лістингу 12.

Лістинг 12. Витяг об'єкта при необхідності
ParseObject po = new ParseObject ( "ExampleObject"); : ParseObject po2 = po.getParseObject ( "key"); // Витяг тільки при необхідності try {po2.fetchIfNeeded (); } Catch (ParseException e) {e.printStackTrace (); }

Інша можливість - виконувати операцію вилучення при необхідності в фоновому режимі за допомогою зворотного виклику. Для цього потрібно використовувати метод об'єкта Parse fetchIfNeededInBackground (GetCallback callback).

Іноді потрібно витягти відразу цілу колекцію об'єктів Parse, безумовно або при необхідності. ParseObject надає для цього набір статичних методів; кожен з них приймає і повертає список об'єктів Parse:

  • fetchAll (List <ParseObject> objects)
  • fetchAllIfNeeded (List <ParseObject> objects)
  • fetchAllIfNeededInBackground (List <ParseObject> objects, FindCallback callback)
  • fetchAllInBackground (List <ParseObject> objects, FindCallback callback)

Пошук об'єктів даних в хмарі

Сподіваюся, що ви вже зрозуміли, наскільки широкі можливості API Parse - але це ще не все! Крім вилучення об'єктів даних, Parse дозволяє запитувати об'єкти даних по object-ID або атрибутам. Для запиту об'єкта даних із хмари Parse використовується метод ParseQuery. Його можна використовувати як для простих, так і для складних запитів даних, отримуючи певний об'єкт або відповідні об'єкти згідно зі списком List.

У лістингу 13 показано, як витягти конкретний об'єкт Parse з сервера у фоновому потоці за ідентифікатором object-ID.

Лістинг 13. Використання ParseQuery для отримання заданого ParseObject
String myID = "12345"; ParseQuery query = new ParseQuery ( "Players"); query.getInBackground (myID, new GetCallback () {@Override public void done (ParseObject object, ParseException e) {if (object! = null) {// Отримати об'єкт} else {// Чи не знайдений}}});

Зверніть увагу, що query.getInBackground () не використовує кеш ParseQuery.

У лістингу 14 наведено запит, який витягує всі об'єкти даних класу Players. (Без обмежень.)

Лістинг 14. Використання ParseQuery для всіх об'єктів ParseObjects заданого класу
ParseQuery query = new ParseQuery ( "Players"); query.findInBackground (new FindCallback () {@Override public void done (List <ParseObject> players, ParseException e) {if (players! = null) {// Отримання списку гравців} else {// Гравців немає}}});

У лістингу 15 я використовував обмеження запиту, щоб вибрати один або більше відповідних об'єктів Parse; в даному випадку, активних гравців.

Лістинг 15. Використання ParseQuery для отримання заданих об'єктів ParseObject

 ParseQuery query = new ParseQuery ( "Players"); query.whereEqualTo ( "status", "active"); query.findInBackground (new FindCallback () {@Override public void done (List <ParseObject> players, ParseException e) {if (players! = null) {// Успіх - серед гравців є активні} else {// Співпадінь немає}} });

У ParseQuery є також метод для підрахунку співпадаючих об'єктів без вилучення самих цих об'єктів - це дуже корисно. У лістингу 16 показано, як підрахувати активних гравців.

Лістинг 16. Використання ParseQuery для підрахунку потрібних об'єктів ParseObject
ParseQuery query = new ParseQuery ( "Players"); query.whereEqualTo ( "status", "active"); // remove this line to count ALL query.countInBackground (new CountCallback () {@Override public void done (int count, ParseException e) {if (e == null) {// Успіх, см змінну count} else {// збігів немає}}});

Методи і обмеження ParseQuery

ParseQuery підтримує більше 20 різних методів запитів з обмеженнями; ось кілька прикладів:

  • whereMatches (String key, String regex) знаходить строкові значення, відповідні вказаним регулярному виразу;
  • whereStartsWith (String key, String prefix) знаходить строкові значення, що починаються з зазначеного рядка;
  • whereContains (String key, String substring) знаходить строкові значення, що містять зазначену рядок;
  • whereGreaterThan (String key, Object value) знаходить значення, які більше зазначеного;
  • whereWithinKilometers (String key, ParseGeoPoint point, double maxDistance) знаходить об'єкти зі значеннями в околицях зазначеного місця в межах заданого максимального відстані.

Результати запиту можна впорядкувати, як показано в лістингу 17. Для цього викличте один з методів query orderBy ... (), вказавши поле сортування.

Лістинг 17. Упорядкування результатів запиту
query.orderByAscending ( "name"); query.orderByDescending ( "name"); For example: ParseQuery query = new ParseQuery ( "Players"); query.whereEqualTo ( "status", "active"); query.orderByAscending ( "lastName"); // На прізвище в порядку зростання query.findInBackground (new FindCallback () {@Override public void done (List <ParseObject> players, ParseException e) {if (players! = Null) {// Успіх - серед гравців є активні} else {// Співпадінь немає}}});

Ще потрібно відзначити, що результати ParseQuery кешуються. Можна задати політику кешування запитів різними способами в залежності від вимог додатка. В даний час підтримуються наступні політики кешування:

  • IGNORE_CACHE: не використовувати кеш; це політика кешування за замовчуванням;
  • CACHE_ONLY: завантаження тільки з кешу. Якщо в кеші результатів немає, видається ParseException;
  • NETWORK_ONLY: завжди звертатися в мережу, але зберігати результати в кеші;
  • CACHE_ELSE_NETWORK: в першу чергу звертатися в кеш. Якщо даних немає, вони завантажуються з мережі. Якщо там збігів теж немає, результатом буде ParseException;
  • NETWORK_ELSE_CACHE: в першу чергу звертатися в мережу. Якщо це не вдається, дані завантажуються з кешу. Якщо там збігів теж немає, результатом буде ParseException;
  • CACHE_THEN_NETWORK: в першу чергу звертатися в кеш, а потім завантажувати дані з мережі. Зверніть увагу, що FindCallback насправді викликається двічі: спочатку для результатів з кеша, потім з мережі. Цю політику можна використовувати тільки асинхронно з методом findInBackground.

Задати політику кеша легко. Це робиться перед викликом методу find ... (), як показано в лістингу 18.

Лістинг 18. Управління CachePolicy
ParseQuery query = new ParseQuery ( "Players"); query.setCachePolicy (ParseQuery.CachePolicy.NETWORK_ELSE_CACHE); query.findInBackground (new FindCallback () {@Override public void done (List <ParseObject> players, ParseException e) {if (e == null) {// Успіх - серед гравців є активні} else {// Співпадінь немає}} });

Клас ParseQuery надає методи, необхідні для виконання запитів об'єктів даних, що зберігаються в хмарі. За допомогою методу ParseQuery можна вказати обмеження запитів всіх видів, підрахувати збігу об'єктів даних, встановити обмеження, пропустити об'єкти даних, впорядкувати їх, очистити кеш і багато іншого.

Видалення об'єктів даних

Операція видалення об'єкта даних із хмари Parse також дуже проста. Коли є екземпляр об'єкта, можна видалити існуючий ParseObject з хмари, викликавши метод ParseObjectdelete () або deleteInBackground (). Обидва показані в лістингу 19.

Лістинг 19. Видалення об'єкта Parse з хмари
parseObject.delete (); parseObject.deleteInBackground ();

Як і слід було очікувати, delete () являє собою блокуючий виклик, що означає, що програміст сам повинен піклуватися про те, щоб правильно спрямувати цей виклик в його робочий потік. Інакше, можна дозволити Parse піклуватися про потоках, скориставшись методом deleteInBackground () зі зворотним викликом або без нього.

Робота з файлами

До сих пір ми працювали з об'єктами Parse і запитами Parse. Я також познайомив читача з користувачами, ACL і ролями Parse. У висновку я продемонструю роботу з файлами - читання, запис і збереження функцій в Parse.

Нагадаю, що неструктуровані дані byte [] можна зберігати всередині ParseObject, що дуже зручно для невеликої кількості даних. При зберіганні більших елементів, таких як зображення або документи, використовуйте Parse Files.

Файли в хмарі Parse відображаються за допомогою класу ParseFile, який надає методи для отримання імені файлу, його URL та даних з цього файлу, якщо вони є. Можна також завантажувати і передавати файли і звертатися до деяких інших допоміжні методам.

Дані файлів представлені за допомогою синтаксису byte []. Зверніть увагу, що в даний час розмір файлу не може перевищувати 10 МБ. При введенні імені файлу бібліотека Parse піклується про можливі конфлікти імен. Вказівка ​​розширення файлу допомагає Parse обробляти його вміст.

Лістинг 20 демонструє збереження файлу JPG.

Лістинг 20. Збереження ParseFile
// Збереження файлу зображення Drawable drawable = ...; Bitmap bitmap = (Bitmap) ((BitmapDrawable) drawable) .getBitmap (); ByteArrayOutputStream stream = new ByteArrayOutputStream (); bitmap.compress (Bitmap.CompressFormat.JPEG, 100, stream); byte [] data = stream.toByteArray (); ParseFile imageFile = new ParseFile ( "image.jpg", data); imageFile.saveInBackground ();

Перші оператори в лістингу 20 перетворять растрове зображення в byte []. Потім byte [] зберігається за допомогою методу ParseFile saveInBackground (), подібно до того, як ParseObject зберігається на сервері.

Коли файл збережений в Parse, його потрібно зв'язати (put into) з ParseOject. Іншими словами, файли Parse не є істинними автономними об'єктами, і щоб витягти їх і використовувати пізніше, їх потрібно зв'язати з даними екземпляром ParseObject. У майбутньої версії Parse це обмеження, можливо, буде усунуто. У лістингу 21 файл зображення зв'язується з об'єктом Parse Player.

Лістинг 21. Зв'язування ParseFile з ParseObject
// Зображення ставиться у відповідність об'єкту Parse ParseObject po = new ParseObject ( "Players"); po.put ( "name", "eortiz"); po.put ( "photo", imageFile); po.saveInBackground ();

Я зв'язав цей файл з об'єктом даних, а потім зберіг об'єкт на сервері за допомогою методу saveInBackgroud (), про який говорилося вище.

У лістингу 22 показано, як витягти файл, пов'язаний з об'єктом даних.

Лістинг 22. Витяг ParseFile
// Витяг файлу ParseFile imageFile2 = (ParseFile) po.get ( "photo"); imageFile2.getDataInBackground (new GetDataCallback () {public void done (byte [] data, ParseException e) {if (data! = null) {// Успішно; файл є в даних} else {// Співпадінь немає}}});

Отримавши посилання ParseFile з об'єкта Parse, я викликав getDataInBackground (), щоб витягти ParseFile з сервера. Зверніть увагу, що для вилучення файлів Parse я використовував зворотний виклик GetDataCallback, замість GetCallback, який призначений для вилучення об'єктів Parse за допомогою ParseQuery.

Висновок

API Parse всеосяжний і містить класи для доступу до мобільних сервісів, таких як повідомлення, використання географічних даних, інтеграція з платформами соціальних мереж і багато іншого. У цій статті я лише торкнувся того, що можна робити за допомогою Parse, представивши API Parse для зберігання даних і файлів в хмарі. Уміння зберігати і маніпулювати обліковими записами користувачів, об'єктами даних, файлами і списками ACL в хмарі Parse служить хорошою основою для подальшого вивчення цієї хмарної платформи розробки мобільних додатків.

Ресурси для скачування

Схожі тими

  • Оригінал статті: Parse cloud-based services for Android apps .
  • Детальніше про Parse Android SDK ; Див. також Короткий посібник з Parse (EN), щоб вибрати мобільну платформу, налаштувати додаток і завантажити і встановити SDK Parse.
  • Повний список API Parse для Android .
  • Develop Android applications with Eclipse (Frank Ableson, developerWorks, лютий 2008 г.): практика розробки Android-додатків в середовищі Eclipse, на цей раз за допомогою плагіна Android Eclipse.
  • Introduction to jQuery Mobile (C. Enrique Ortiz, developerWorks, травень 2012 року): основи jQuery Mobile і розробки інтерфейсу користувача мобільних Web-додатків. Приклади сторінок, елементів навігації, панелей інструментів, списків, форм і перехідних ефектів в jQuery Mobile.
  • Solve your many-device-to-many-platform mobile application integration challenges (Olivier Picciotto, developerWorks, серпень 2012 року): сьогодні розробка мобільних додатків і хмарні обчислення практично нероздільні, але інтеграція мобільних додатків в хмару - все ще незвідана територія. Це стаття про те, як платформа мобільних додатків підприємства (MEAP) вирішує деякі проблеми інтеграції мобільних додатків і хмари.
  • DevOps for mobile development »(Майкл Роу, developerWorks, липень 2012 року): компанії у всьому світі бажають експлуатувати ринок мобільних пристроїв, надаючи клієнтам і користувачам додатки, що полегшують мобільні обчислення. У цій статті розглядаються деякі технічні і економічні питання, пов'язані з інтеграцією розробки та експлуатацією мобільних платформ на робочих місцях.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

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

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: