AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

步骤 4:创建适用于 Android 的移动应用程序

现在,您可以创建一个简单的 Android 移动应用程序,使其生成事件并通过以参数形式传递事件数据调用 Lambda 函数。

以下操作不受已用 Android studio 进行了验证。

  1. 使用下面的配置创建名为 AndroidEventGenerator 的新 Android 项目:

    • 选择 Phone and Tablet 平台。

    • 选择 Blank Activity

  2. 在 build.gradle (Module:app) 文件的 dependencies 部分中添加以下内容:

    Copy
    compile 'com.amazonaws:aws-android-sdk-core:2.2.+' compile 'com.amazonaws:aws-android-sdk-lambda:2.2.+'
  3. 构建项目,以便根据需要下载必需的依赖项。

  4. 在 Android 应用程序清单 (AndroidManifest.xml) 中,添加以下权限,以使您的应用程序能够连接 Internet。可以将它们添加在 </manifest> 结束标签之前。

    Copy
    <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5. MainActivity 中,添加以下导入:

    Copy
    import com.amazonaws.mobileconnectors.lambdainvoker.*; import com.amazonaws.auth.CognitoCachingCredentialsProvider; import com.amazonaws.regions.Regions;
  6. package 部分中,添加以下两个类(RequestClassResponseClass)。请注意,此 POJO 与您在上一节中的 Lambda 函数中创建的 POJO 相同。

    • RequestClass。此类的实例将充当包含名字和姓氏的事件数据的 POJO (Plain Old Java Object)。如果您使用的是在上一节中创建的 Lambda 函数的 Java 示例,则此 POJO 与您在 Lambda 函数代码中创建的 POJO 相同。

      Copy
      package com.example....lambdaeventgenerator; public class RequestClass { String firstName; String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public RequestClass(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public RequestClass() { } }
    • ResponseClass

      Copy
      package com.example....lambdaeventgenerator; public class ResponseClass { String greetings; public String getGreetings() { return greetings; } public void setGreetings(String greetings) { this.greetings = greetings; } public ResponseClass(String greetings) { this.greetings = greetings; } public ResponseClass() { } }
  7. 在相同的程序包中,创建名为 MyInterface 的接口,以用于调用 AndroidBackendLambdaFunction Lambda 函数。

    注意

    代码中的 @LambdaFunction 注释将该特定的客户端方法映射到同名的 Lambda 函数。有关此注释的更多信息,请参阅 适用于 Android 的 AWS 移动软件开发工具包 Developer Guide 中的 AWS Lambda

    Copy
    package com.example.....lambdaeventgenerator; import com.amazonaws.mobileconnectors.lambdainvoker.LambdaFunction; public interface MyInterface { /** * Invoke the Lambda function "AndroidBackendLambdaFunction". * The function name is the method name. */ @LambdaFunction ResponseClass AndroidBackendLambdaFunction(RequestClass request); }
  8. 为使应用程序保持简单,我们将在 onCreate() 事件处理程序中添加调用 Lambda 函数的代码。在 MainActivity 中,向 onCreate() 代码末尾处添加以下代码。

    Copy
    // Create an instance of CognitoCachingCredentialsProvider CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider( this.getApplicationContext(), "identity-pool-id", Regions.US_WEST_2); // Create LambdaInvokerFactory, to be used to instantiate the Lambda proxy. LambdaInvokerFactory factory = new LambdaInvokerFactory(this.getApplicationContext(), Regions.US_WEST_2, cognitoProvider); // Create the Lambda proxy object with a default Json data binder. // You can provide your own data binder by implementing // LambdaDataBinder. final MyInterface myInterface = factory.build(MyInterface.class); RequestClass request = new RequestClass("John", "Doe"); // The Lambda function invocation results in a network call. // Make sure it is not called from the main thread. new AsyncTask<RequestClass, Void, ResponseClass>() { @Override protected ResponseClass doInBackground(RequestClass... params) { // invoke "echo" method. In case it fails, it will throw a // LambdaFunctionException. try { return myInterface.AndroidBackendLambdaFunction(params[0]); } catch (LambdaFunctionException lfe) { Log.e("Tag", "Failed to invoke echo", lfe); return null; } } @Override protected void onPostExecute(ResponseClass result) { if (result == null) { return; } // Do a toast Toast.makeText(MainActivity.this, result.getGreetings(), Toast.LENGTH_LONG).show(); } }.execute(request);
  9. 运行代码并按以下方式验证它:

    • Toast.makeText() 显示返回的响应。

    • 验证 CloudWatch Logs 能够显示 Lambda 函数创建的日志。它应显示事件数据(名字和姓氏)。您也可以在 AWS Lambda 控制台中对此进行验证。