AWS API Gateway SDK, проблемы с Android - PullRequest
0 голосов
/ 21 апреля 2020

Я пытался использовать Android SDK, сгенерированный AWS API Gateway, последние два дня без особого успеха. Я следовал инструкциям по созданию простого калькулятора с использованием лямбда-функции, созданию API простого калькулятора и интеграции их двух.

Используя консоль API, я могу проверить POST, и она работает нормально, я получаю правильный результат, получая два цифры и операция. Мои проблемы начинаются, когда я генерирую SDK для Android.

Следуя этому руководству (https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-generate-sdk-android.html), я создал файлы .jar и добавил их в папку "libs" в Android Studio вместе с зависимостями.

Однако, когда я вызываю метод 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 to

        String 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" из другого вопроса, размещенного здесь. Что заставляет меня верить, что я что-то очень очевидное упускаю Следования только вышеприведенному уроку недостаточно, и предполагается, что вы уже знаете кое-что, чего я не знаю.

Есть идеи, что мне здесь не хватает?

1 Ответ

0 голосов
/ 22 апреля 2020

Я нашел, в чем была моя проблема.

Я получил ошибку, потому что код работал на «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();

}

...