JsonReaderException, когда вызывается лямбда-функция AWS из Android - PullRequest
0 голосов
/ 27 сентября 2018

Привет. Я пытаюсь вызвать лямбда-функцию с мобильного бэк-энда.

Я сгенерировал лямбда-функцию, используя .Net Core

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

Это нормально вызывает без ошибок в.Сетевое ядро ​​и консоль 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);

}

1 Ответ

0 голосов
/ 28 сентября 2018

Поскольку ваша лямбда-функция принимает строковый параметр и возвращает строку, ваш интерфейс для функции должен выглядеть следующим образом:

открытый интерфейс MyInterface {

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...