CognitoUserPool userPool = new CognitoUserPool(this, AWSMobileClient.getInstance(). GetConfiguration()); дает нулевое значение

Я использую AWS cognito для входа в систему. Я не хочу жестко задавать значения userPoolId, clientId, clientSecret и region. Я нашел способ, используя

CognitoUserPool userPool = new CognitoUserPool(this, AWSMobileClient.getInstance(). GetConfiguration());

но userPool дает нулевое значение.

Файл awsconfiguration.json находится в файле res/raw/awsconfiguration.json.

Спасибо за помощь заранее!!!

1 ответ

Решение

Развивая точку зрения, высказанную Karthikeyan в комментарии, вы должны убедиться, что AWSMobileClient действительно инициализирован, прежде чем вы сможете использовать его для получения конфигурации AWS. Следующий фрагмент демонстрирует один из способов достижения того, что вы ищете:

    CognitoUserPool cup;
    final CountDownLatch latch = new CountDownLatch(1);

    AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {

                @Override
                public void onResult(UserStateDetails userStateDetails) {
                    Log.i("INIT", "onResult: " + userStateDetails.getUserState());
                    latch.countDown();
                }

                @Override
                public void onError(Exception e) {
                    Log.e("INIT", "Initialization error.", e);
                    latch.countDown();
                }
            }
    );

    try {
        latch.await();
        cup = new CognitoUserPool(getApplicationContext(), AWSMobileClient.getInstance().getConfiguration());
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

Надеюсь, поможет!

Согласно документации,

https://aws-amplify.github.io/docs/sdk/android/authentication

Вам нужно перейти в MainActivity и внутри onCreate() запустить процедуру initialize():

AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {

        @Override
        public void onResult(UserStateDetails userStateDetails) {
            Log.i("INIT", "onResult: " + userStateDetails.getUserState());
        }

        @Override
        public void onError(Exception e) {
            Log.e("INIT", "Initialization error.", e);
        }
    }
);

Поскольку вы еще не вошли в систему, он напечатает состояние SIGNED_OUT.

Другие вопросы по тегам