java - JsonReaderException ,当从 Android 调用 AWS lambda 函数时

标签 java android amazon-web-services aws-lambda

您好,我正在尝试从移动后端调用 lambda 函数。

我使用.Net Core生成了Lambda函数

      public string FunctionHandler(string text, ILambdaContext 
      {
         return qrcode;
      }

此调用正常,在 .net core 和 AWS 控制台中没有任何错误。

但是当我尝试从 Android Studio 调用它时,我收到以下错误。

{
"errorType": "JsonReaderException",
"errorMessage": "Unexpected character encountered while parsing value: {. Path '', line 1, position 1.",
"stackTrace": [
"at Newtonsoft.Json.JsonTextReader.ReadStringValue(ReadType readType)",
"at Newtonsoft.Json.JsonTextReader.ReadAsString()",
"at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)",
"at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)",
"at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)",
"at Newtonsoft.Json.JsonSerializer.Deserialize[T](JsonReader reader)",
"at lambda_method(Closure , Stream , Stream , ContextInfo )"
]
}

Java 代码,

CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider(MainActivity.this, "xxxxx", xxxxx);

LambdaInvokerFactory factory = new LambdaInvokerFactory(MainActivity.this,
                                xxxxx, cognitoProvider);

final MyInterface myInterface = factory.build(MyInterface.class);

RequestClass request = new RequestClass("Hello World");

new AsyncTask<RequestClass, Void, ResponseClass>() {@Override protected ResponseClass doInBackground(RequestClass... params) 
{

 try {
     return myInterface.TestApp(params[0]);
 } catch (LambdaFunctionException lfe) {
     Log.e("Tag", "Failed to invoke echo", lfe);
     return null;
 }
 catch(Exception e){
 Log.e("Tag", "Failed to invoke echo", e);
 return null;
 }
 }

界面:

import com.amazonaws.mobileconnectors.lambdainvoker.LambdaFunction;
public interface MyInterface {
    @LambdaFunction(functionName="TestApp")
    ResponseClass TestApp(RequestClass request);

}

最佳答案

由于您的 lambda 函数接受字符串参数并返回字符串,因此该函数的接口(interface)应如下所示:

公共(public)接口(interface)MyInterface{

@LambdaFunction(functionName="TestApp")
String TestApp(String request);

}

关于java - JsonReaderException ,当从 Android 调用 AWS lambda 函数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52530262/

相关文章:

python-3.x - 在 AWS Ubuntu EC2 实例中使用 Python 进行 IP 切换

java - 我在 Android 中执行线程的方式是否正确?

java - 如何找到方法的调用者?

android - 如何在键盘出现时将整个 View 推上去,需要进行哪些布局更改?

Android 控制台显示 : W/art: Attempt to remove non-JNI local reference

amazon-web-services - aws 上的 reCaptcha 和负载均衡器

java - 在将对象传递给 ORM 助手类以持久化之前验证对象的最佳实践是什么

java - 进口声明的历史是什么?

Android 测试启动画面

python - 如何使用 Boto 获取实例的最新 Cloudwatch 指标数据?