青春须早为,岂能长少年。这篇文章主要讲述AWS API网关SDK,与Android的问题相关的知识,希望能为你提供帮助。
这两天我一直在尝试使用AWS API网关生成的android SDK,但没有太大成功。我按照教程使用Lambda函数创建了一个简单的计算器,创建了一个简单的计算器API,并将两者进行了整合。
使用API控制台,我可以测试POST,它工作正常,我收到正确的结果提供两个数字和一个操作。我的问题开始时,我生成一个Android的SDK。
按照这个教程(https:/docs.aws.amazon.comapigatewaylatestdeveloperguidehow-generate-sdk-android.html。)我创建了.jar文件,并将它们和依赖关系一起添加到Android Studio的 "libs "文件夹中。
【AWS API网关SDK,与Android的问题】然而,当我调用 "client.rootPost() "方法时,我得到一个错误。如果不复制整个错误日志,错误内容如下。
at com.amazonaws.mobileconnectors.apigateway.ApiClientHandler.invoke(ApiClientHandler.java:118)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at $Proxy3.execute(Unknown Source)
at com.example.awstest.MainActivity.onCreate(MainActivity.java:52)
我在MainActivity中的代码是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
ApiClientFactory factory = new ApiClientFactory();
final SimpleCalculatorAPIClient client = factory.build(SimpleCalculatorAPIClient.class);
Input body = new Input();
body.setA(new BigDecimal(1));
body.setB(new BigDecimal(1));
body.setOp("+");
Result output = client.rootPost(body);
//LINE 52, where the error points toString result = output.getOutput().getC().toString();
}
在我的build.gradle中,我有以下的依赖关系。
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.jar'], dir: 'app/libs')
implementation 'com.amazonaws:aws-android-sdk-core:2.16.11'
implementation 'com.amazonaws:aws-android-sdk-apigateway-core:2.16.11'
最后两个依赖项不是教程的一部分,但我发现我需要它们来调用 "ApiClientFactory" 类的另一个问题。这让我相信,关于这个问题,我漏掉了一些很明显的东西。仅仅按照上面的教程是不够的,它假设你已经知道一些东西,而我不知道。
有什么想法,我在这里遗漏了什么?
答案我找到了我的问题所在。
我得到的错误,因为代码是运行在 "onCreate",而不是它必须运行在自己的线程。举个例子,我的代码是在 "onCreate "上运行,而不是在自己的线程中运行。
private void awsTest() {
Thread thread = new Thread() {
@Override
public void run() {
try {
sleep(10);
ApiClientFactory factory = new ApiClientFactory();
final SimpleCalculatorAPIClient client = factory.build(SimpleCalculatorAPIClient.class);
Input body = new Input();
body.setA(new BigDecimal(1));
body.setB(new BigDecimal(1));
body.setOp("+");
Output output = client.rootPost(body);
Result result = new Result();
result.setOutput(output);
String i = result.getOutput().getC().toPlainString();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
推荐阅读
- 使用Back4app-Cli部署本地解析服务器。
- Apps Script
- 如何测试托管在Azure Appservice上的SignalR应用(负载+功能结合)()
- 安卓ListView在行末添加文本。
- 如何在Android应用中测试Google Actions()
- 在JavaAndroid中获取开始和结束的一天的纪元第二。
- 如何在spring-boot中用application.properties制作config类()
- 在android studio中引用Firestore
- Sqlite表在小米Note 7s上不创建,但在其他手机和Android Studio中的虚拟设备上创建。