Как добавить кнопку в ActionBar (Android)?

Я реорганизовал некоторые фрагменты вашего кода, чтобы они выглядели намного проще, и использую async / await (убедитесь, что в качестве рабочей среды для вашей функции выбран Node 8.10) вместо обратных вызовов. Я также избавился от параметров context и callback, так как они использовались для более старых версий NodeJS. Как только вы используете Node 8+, async / await должен быть опцией по умолчанию.

Кроме того, можно связать .promise () с docClient.putItem, чтобы вы могли легко ожидать его, что упрощает ваш код. Я оставил только часть DynamoDB (которая имеет отношение к вашему вопросу)

'use strict';
console.log("Loading function");

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region:process.env.MOBILE_HUB_PROJECT_REGION});

exports.handler = async (event) => {

    let params = {
        Item:{
            "prop0":1,
            "prop2":"text"
        },
        TableName:"testTable"
    };

    try {
      await docClient.put(params).promise();
    } catch (e) {
      console.log(e)
      return {
        messsage: e.message
      }
    }

    return { message: 'Data inserted successfully' };

};

Что нужно иметь в виду, если она все еще не работает:

  1. Убедитесь, что ваша лямбда-функция имеет необходимые разрешения для вставки элементов в DynamoDB (AmazonDynamoDBFullAccess сделает это)

  2. Вы ВСЕГДА должны указывать ключ разделения при вставке элементов в DynamoDB. В вашем примере JSON имеет только два свойства: prop1 и prop2. Если ни один из них не является ключом раздела, ваш код непременно завершится неудачей.

  3. Убедитесь, что ваша таблица также существует

Если код не работает, просто проверьте журналы CloudWatch, так как все исключения теперь регистрируются и выводятся на консоль.

30
задан 06.05.2020, 14:45

1 ответ

Активность заполняет ActionBar в его методе onCreateOptionsMenu().

Вместо использования setcustomview() просто переопределите onCreateOptionsMenu следующим образом:

@Override    
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mainmenu, menu);
  return true;
}

Если выбрано действие в ActionBar, вызывается метод onOptionsItemSelected(). Он получает выбранное действие в качестве параметра. На основании этой информации ваш код может решить, что делать, например:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
    case R.id.menuitem1:
      Toast.makeText(this, "Menu Item 1 selected", Toast.LENGTH_SHORT).show();
      break;
    case R.id.menuitem2:
      Toast.makeText(this, "Menu item 2 selected", Toast.LENGTH_SHORT).show();
      break;
  }
  return true;
}
18
ответ дан 06.05.2020, 14:45
  • 1
    " это пропускает дополнительные инструменты..." Isn' t это, для чего REST? – user523234 12.12.2019, 11:35

Теги

Похожие вопросы