转载

使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

您可能已知道 Bluemix 的一些优势,这是 IBM 用于开发和部署移动和 Web 应用程序的开放平台。Bluemix 中的移动解决方案中许多预先构建的服务使得开发人员能够轻松地构建和增强应用程序。

本系列教程 将介绍如何向您的应用程序添加基于云的服务。在本教程中,我们将介绍使用 IBM Mobile Data for Bluemix 服务 构建一个 Android 应用程序的步骤。

正在 MobileFirst Platform 中寻找新的 iOS 8 beta 服务 ?以下是一些 入门操作 。另请查阅我们 更新的 BlueList 示例代码 。

观看: 网络广播:使用 MobileData Cloud 构建 Android 应用程序

您是否曾经前往杂货店,然后却忘记了您的配偶制作美味甜点所需的原料是什么?或者忘记了孩子们请求第二天吃的饭后甜点是什么?如果将他们的请求输入一个共享的杂货列表中,您可以收到提醒您进行更新的推送通知,那该有多好?

输入 BlueList 应用程序。它是一个使用 Bluemix 服务的简单应用程序,使您能够立即开始编写自己的(更复杂的)应用程序!本教程将展示如何从一个 Android 应用程序入手,添加 IBM Mobile Data for Bluemix 服务来存储、删除、更新和查询存储在云中的对象。(未来的一篇教程将展示如何向应用程序添加 Push 和 Node.js Cloud 服务,以便在货物列表更新时获得通知,因此,当某个设备以某种方式更新列表时,所有设备上的列表都会得到更新。)

这个简单的应用程序使用了 Bluemix 服务,将引导您立即开始编写自己的(更复杂的)应用程序。

使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

bluelist-base(v0) 代码是 BlueList 应用程序的基础版本。我们将展示如何添加 IBM Mobile Data for Bluemix 服务,以便您的代码看起来将像 bluelist-mobiledata(v1) 代码。您可从 bluelist-base(v0) 开始逐步执行,或者直接下载 bluelist-mobiledata(v1)。BlueList 应用程序的 bluelist-mobiledata(v1) 版本包含 IBM Mobile Data for Bluemix 服务。

构建您的应用程序需要做的准备工作

  • 熟悉 Android 开发 。
  • 一个 Android 开发环境。我们使用了带 ADT 的 Eclipse,但您也可使用自己喜欢的开发环境。

    备注:如果您决定使用 Android Studio,那么可以跳过步骤 1.7-1.9,因为 Android 根目录中提供的 gradle.build 文件将引入需要的依赖项。请浏览以下这几个步骤,以便熟悉 Gradle 构建代码,取消注释需要的依赖项。您还需要 下载 Gradle.zip ,并将内容解压到您选择的目录中。当 Android Studio 提示输入 GRADLE_HOME 时,请使用 .zip 的解压路径,也就是 bin 目录所在的路径。

  • bluelist-base(v0) 代码。单击上面的按钮,然后将 bluelist-android-base 代码导入您的 Android 开发环境中并进行构建。在模拟器中运行此代码。重新启动应用程序,请注意,列表项没有持久化。本教程中的步骤将展示如何将 IBM Mobile Data for Bluemix 服务添加到您的应用程序,以便让列表项持久化。
  • 一个 Bluemix ID,以便使用 IBM Mobile Data for Bluemix 服务 。

阅读: 开始使用 Mobile Data

第 1 步. 在 Bluemix 上创建一个 Mobile Cloud 应用程序

  1. 登录到 Bluemix 。
  2. 单击 Add an application 转到应用程序目录。 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  3. 单击 Boilerplates 下的 Mobile Cloud使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  4. 单击 Create Application使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  5. 选择一个空格并为您的应用程序选择一个名称,将其填入 “Finish Adding Mobile Cloud” 面板中。然后单击 Create使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  6. 在创建应用程序后,该应用程序将显示在您的仪表板中。单击您的新应用程序转到它的 Overview 页面。 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  7. 您会看到新应用程序的 Overview 页面。然后单击 Download SDKs 。(如果使用的是 Android Studio,请跳过这一步。)
    使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

    点击查看大图

    关闭 [x]

    使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

    备注:在以后的操作中,需要使用这个 Application ID。

  8. 您将看到介绍如何构建一个移动应用程序的文档。在这里,单击 Android SDK 。(如果使用的是 Android Studio,请跳过这一步。) 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

    点击查看大图

    关闭 [x]

    使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

  9. 解压您刚下载的 SDK,将需要的 jar 文件(ibmbluemix.jar、ibmdata.jar 和 ibmfilesync.jar)复制到您 bluelist-android-base 项目的 libs 文件夹中。(如果使用的是 Android Studio,请跳过这一步。) 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  10. 将 applicationID、applicationSecret 和 applicationRoute 值复制到项目的 assets 文件夹中的 bluelist.properties 文件中。applicationRoute 和 applicationID 值可在您应用程序的 Overview 页面上找到。applicationSecret 只能在您应用程序的 Mobile Application Security 页面上找到。要获得这些值,可以登录到 Bluemix,转到您的仪表板,然后单击想要的应用程序。applicationRoute 和 applicationID 值可以在 Overview 页面顶部看到。单击导航区域中的 Mobile Application Security 链接,以便获得 applicationSecret 值。properties 文件用于加载重要的外部数据。
    applicationID=<INSERT_APPLICATION_ID_HERE>      applicationSecret=<INSERT_APPLICATION_SECRET_HERE>      applicationRoute=<INSERT_APPLICATION_ROUTE_HERE>

第 2 步. 添加基本的权限

  1. 您的 Android 应用程序需要一些基本的网络功能和权限,所以我们在清单文件中包含了以下权限。请打开 AndroidManifest.xml 文件查看它们。
<uses-permission  android:name="android.permission.INTERNET" /> <uses-permission  android:name="android.permission.WAKE_LOCK" /> <uses-permission  android:name="android.permission.GET_ACCOUNTS" /> <uses-permission  android:name="android.permission.USE_CREDENTIALS" /> <uses-permission  android:name="android.permission.ACCESS_WIFI_STATE" /> 

第 3 步. 编辑 BlueListApplication 来初始化 SDK 和服务,以及向 IBM Mobile Data for Bluemix 服务注册 Item 规范。

  1. 定义两个常量,使用它们从 bluelist.properties 文件中读取数据。
    public final class BlueListApplication extends Application {  private static final String APP_ID = "applicationID";  private static final String APP_SECRET = "applicationSecret";  private static final String APP_ROUTE = "applicationRoute";  private static final String PROPS_FILE = "bluelist.properties";
  2. 在创建应用程序时,读取 bluelist.properties 文件来获取应用程序 ID。在 onCreate 方法中执行以下编辑:
    public void onCreate() {  super.onCreate();  itemList = new ArrayList<Item>();  // Read from properties file  Properties props = new java.util.Properties();  Context context = getApplicationContext();  try {   AssetManager assetManager = context.getAssets();   props.load(assetManager.open(PROPS_FILE));   Log.i(CLASS_NAME, "Found configuration file: " + PROPS_FILE);  } catch (FileNotFoundException e) {   Log.e(CLASS_NAME, "The bluelist.properties file was not found.", e);  } catch (IOException e) {   Log.e(CLASS_NAME, "The bluelist.properties file could not be read properly.", e);  } }
  3. 创建 Android 应用程序时,初始化 SDK,初始化服务,并注册 Item 规范。在 onCreate 方法中,在读取 properties 文件的代码之后执行以下编辑:
    // initialize the IBM core backend-as-a-service IBMBluemix.initialize(this, props.getProperty(APP_ID),       props.getProperty(APP_SECRET), props.getProperty(APP_ROUTE)); // initialize the IBM Data Service IBMData.initializeService(); // register the Item Specialization Item.registerSpecialization(Item.class);
  4. 在此过程中,不要忘记使用 Eclipse 来组织导入 ( Ctrl + Shift + O )。这将自动从您之前复制到项目中的 SDK jar 中导入全部所需的元素。此刻您可能仍会看到一些错误,随着您继续按这些说明进行操作,这些错误应该会得到处理。

第 4 步. 编辑 Item 类,以使用 IBM Mobile Data for Bluemix 服务

  1. 通过扩展 Mobile Data 的 IBMDataObject ,并将此类标注为 IBMDataObjectSpecialization ,集成 IBM Mobile Data for Bluemix 服务。一定要添加 NAME 字符串,以后会将它用作一个用来访问对象的键。
    @IBMDataObjectSpecialization("Item") public class Item extends IBMDataObject {  public static final String CLASS_NAME = "Item";  private static final String NAME = "name";
  2. 编辑 getName()setName() 方法,以便使用 Mobile Data 服务的 getObjectsetObject 方法。与对象关联的值通过键来引用。您可使用 setObject(<key>, <value>) 设置值,使用 getObject(<key>) 来检索它们。
    public String getName() {  return (String) getObject(NAME); } public void setName(String itemName) {  setObject(NAME, (itemName != null) ? itemName : ""); }
  3. 删除 Item 构造函数,因为不再需要它。
  4. 再次组织您的导入!

第 5 步. 在 MainActivity 类中,使用 IBM Mobile Data for Bluemix 服务在云中创建、读取和删除数据

  1. 实现 listItems 方法来从 IBM Mobile Data for Bluemix 服务读取数据项。我们将按不区分大小写的字母顺序来排序这些项。创建 listItems 作为 MainActivity 类的方法。

    点击查看代码清单

    关闭 [x]

    public void listItems() {  try {   IBMQuery<Item> query = IBMQuery.queryForClass(Item.class);   // Query all the Item objects from the server   query.find().continueWith(new Continuation<List<Item>, Void>() {     @Override     public Void then(Task<List<Item>> task) throws Exception {      final List<Item> objects = task.getResult();       // Log if the find was cancelled.      if (task.isCancelled()){       Log.e(CLASS_NAME, "Exception : Task " + task.toString() + " was cancelled.");      }       // Log error message, if the find task fails.      else if (task.isFaulted()) {       Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());      }       // If the result succeeds, load the list.      else {       // Clear local itemList.       // We'll be reordering and repopulating from DataService.       itemList.clear();       for(IBMDataObject item:objects) {        itemList.add((Item) item);       }       sortItems(itemList);       lvArrayAdapter.notifyDataSetChanged();      }      return null;     }    },Task.UI_THREAD_EXECUTOR);   }  catch (IBMDataException error) {    Log.e(CLASS_NAME, "Exception : " + error.getMessage());   }  } 
  2. onCreate 方法中设置 ArrayAdapter 后,调用 listItems() 在列表中填充已使用 IBM Mobile Data for Bluemix 服务存储的项。
    itemsLV.setAdapter(lvArrayAdapter);  /* Refresh the list. */ listItems();
  3. 更改 createItem 方法,以便使用一个 IBMDataObject 类实例创建新项。在该实例上调用 Mobile Data 的 save() 方法,并使用 continueWith() 方法来处理错误或加载更新的列表。

    点击查看代码清单

    关闭 [x]

    public void createItem(View v) {  EditText itemToAdd = (EditText) findViewById(R.id.itemToAdd);  String toAdd = itemToAdd.getText().toString();  Item item = new Item();  if (!toAdd.equals("")) {   item.setName(toAdd);   // Use the IBMDataObject to create and persist the Item object.   item.save().continueWith(new Continuation<IBMDataObject, Void>() {     @Override    public Void then(Task<IBMDataObject> task) throws Exception {     // Log if the save was cancelled.     if (task.isCancelled()){      Log.e(CLASS_NAME, "Exception : Task " + task.toString() + " was cancelled.");     }      // Log error message, if the save task fails.     else if (task.isFaulted()) {      Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());     }       // If the result succeeds, load the list.     else {      listItems();     }     return null;    }    });      // Set text field back to empty after item is added.   itemToAdd.setText("");  } }
  4. deleteItem 方法执行一些更改。它现在将在 IBMDataObject 类的一个实例上调用 Mobile Data 的 delete() 方法。 delete() 方法返回一个 Bolts Task ,用于检查任务是成功还是失败了。

    点击查看代码清单

    关闭 [x]

    public void deleteItem(Item item) {  itemList.remove(listItemPosition);    // This will attempt to delete the item on the server.  item.delete().continueWith(new Continuation<IBMDataObject, Void>() {    @Override   public Void then(Task<IBMDataObject> task) throws Exception {    // Log if the delete was cancelled.    if (task.isCancelled()){     Log.e(CLASS_NAME, "Exception : Task " + task.toString() + " was cancelled.");    }      // Log error message, if the delete task fails.    else if (task.isFaulted()) {     Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());     }      // If the result succeeds, reload the list.    else {     lvArrayAdapter.notifyDataSetChanged();    }    return null;   }  },Task.UI_THREAD_EXECUTOR);    lvArrayAdapter.notifyDataSetChanged(); }

第 6 步. 在 EditActivity 类中,使用 IBM Mobile Data for Bluemix 服务更新云上的数据

  1. finishedEdit 方法将在要更新的 IBMDataObject 的实例上调用 Mobile Data 的 save() 方法。实现 continueWith() 方法来处理所有错误。
    public void finishedEdit(View v) {  Item item = itemList.get(location);  EditText itemToEdit = (EditText) findViewById(R.id.itemToEdit);  String text = itemToEdit.getText().toString();  item.setName(text);  item.save().continueWith(new Continuation<IBMDataObject, Void>() {    @Override   public Void then(Task<IBMDataObject> task) throws Exception {    if(task.isCancelled()) {     Log.e(CLASS_NAME, "Exception : " + task.toString() + " was cancelled.");    }     else if (task.isFaulted()) {     Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());    }        else {     Intent returnIntent = new Intent();     setResult(BlueListApplication.EDIT_ACTIVITY_RC, returnIntent);     finish();    }    return null;   }     },Task.UI_THREAD_EXECUTOR);  }

第 7 步. 运行应用程序

  1. 现在您完成所有代码更改,您的代码现在应与 bluelist-mobiledata (v1) 代码等同,而且您的列表项应已持久化!
  2. 在您模拟器(Nexus 7 或 Galaxy Nexus 都合适)中或设备上运行最新的代码。单击 Run > Run As > Android Application
      使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  3. 添加一些杂货列表商品。
     
    使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  4. 重新启动应用程序。
  5. 您可能注意到,您的数据项已经持久化。目前,您的数据已在云上!

第 8 步. 在云中查看数据

  1. 登录到 Bluemix 。
  2. 在 Dashboard 视图中单击您的应用程序。
  3. 单击 Mobile Data 服务。
  4. 在 Manage Data 选项卡上,可以看到存储在云中的 Data Classes,以及持久化的每个 Data Class 实例。 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序
  5. 在 Analytics 选项卡上,可以看到您应用程序的各种分析数据,包括不同设备的 API 调用总数、不同类型的 API 调用,以及使用的存储容量。 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

    点击查看大图

    关闭 [x]

    使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

结束语

使用 Bluemix 中的 MobileData 服务 开发这个应用程序,应该能让您了解通过移动云服务来使用和集成移动数据功能有多容易! 使用 IBM Mobile Data for Bluemix 云服务构建一个 Android 应用程序

BLUEMIX SERVICE USED IN THIS TUTORIAL: Mobile Data 服务 提供容易使用的 SDK,这些 SDK 支持通过熟悉的面向对象的 API 访问一个可扩展、完全托管的数据库。

正文到此结束
Loading...