【问题标题】:JsonReaderException , when invoke AWS lambda function from AndroidJsonReaderException ,当从 Android 调用 AWS lambda 函数时
【发布时间】:2019-03-02 23:19:04
【问题描述】:

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

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

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

这个调用很好,在 .net 核心和 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);

}

【问题讨论】:

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


    【解决方案1】:

    由于你的 lambda 函数接受一个字符串参数并返回一个字符串,你的函数接口应该是这样的:

    公共接口 MyInterface {

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

    }

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2018-08-21
      • 2019-09-14
      • 2021-02-17
      相关资源
      最近更新 更多