Squeak.ru - шаблоны программирования

Мобильный SDK Amazon AWS для Android и его утилита загрузки S3 не сообщают об ошибках. Есть идеи, почему?

Вот курс прямо сейчас:

Изменить

Забыл упомянуть, но тестируется версия Android Lollipop 5.1.

public class AmazonS3Helper
{
    Context context;

    public String bucket;
    public String key;

    public File file;

    public AmazonS3 s3;
    public TransferUtility utility;

    public AmazonS3Helper(JSONObject p, Context c)
    {
        Log.i("tag", "new AmazonS3Helper object");

        this.context = c;

        try
        {
            bucket    = p.getString("bucket");
            key        = p.getString("key");


            this.file = new File(
                c.getExternalFilesDir(null),
                "nn_temp_photo.jpg");

            credentialsProvider();
            setTransferUtility();

            upload();
        }
        catch (Exception x)
        {
            Log.i("tag", "Error in new AmazonS3Helper object: " + x.getMessage());
        }
    }

    public void credentialsProvider()
    {
        Log.i("tag", "Providing credentials");

        try
        {
            CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                this.context,
                // This has been verified to return the correct identity pool
                MyApplicationClass.getPreference("aws.credentials"),
                Regions.US_EAST_1);

            setAmazonS3Client(credentialsProvider);
        }
        catch (Exception x)
        {
            Log.i("tag", "Error in providing credentials: " + x.getMessage());
        }
    }

    public void setAmazonS3Client(CognitoCachingCredentialsProvider credentialsProvider)
    {
        Log.i("tag", "Setting amazon s3 client");

        try
        {
            s3 = new AmazonS3Client(credentialsProvider);
            s3.setRegion(Region.getRegion(Regions.US_EAST_1));
        }
        catch (Exception x)
        {
            Log.i("tag", "Error in setting amazon s3 client:" + x.getMessage());
        }
    }

    public void setTransferUtility()
    {
        Log.i("tag", "Setting transfer utility");

        try
        {
            utility =
                new TransferUtility(
                    s3,
                    this.context);
        }
        catch (Exception x)
        {
            Log.i("tag", "Error in setting transfer utility: " + x.getMessage());
        }
    }

    public void upload()
    {
        Log.i("tag", "uploading");

        try
        {
            TransferObserver transferObserver = utility.upload(
                bucket,
                key,
                file
            );

            transferObserverListener(transferObserver);
        }
        catch (Exception x)
        {
            Log.i("tag", "Error in uploading: " + x.getMessage());
        }
    }

    public void transferObserverListener(TransferObserver transferObserver)
    {
        Log.i("tag", "transferObserverListener");

        try
        {
            transferObserver.setTransferListener(new TransferListener()
            {
                @Override
                public void onStateChanged(int id, TransferState state)
                {
                    Log.i("tag", state + "");
                }

                @Override
                public void onProgressChanged(int id, long bytesCurrent, long bytesTotal)
                {
                    int percentage = (int) (bytesCurrent / bytesTotal * 100);
                    Log.i("tag", percentage + "");
                }

                @Override
                public void onError(int id, Exception ex)
                {
                    Log.i("tag", "error");
                }
            });
        }
        catch (Exception x)
        {
            Log.i("tag", "Error in transferObserverListener: " + x.getMessage());
        }
    }
}


Это ошибка версии 2.2.15. О некоторых исключениях ввода-вывода не сообщается. Это исправлено в 2.2.16. Не могли бы вы попробовать последнюю версию?


Ответы:


1

Проблема решена и совершенно не связана с самим кодом. Происходило то, что я объявлял _1_ в манифесте библиотеки, но дочерние приложения также нуждались в этом в своем манифесте.

13.05.2016
  • Не могли бы вы предоставить полный код? Я не вижу здесь ничего плохого в вашем коде. Если пример приложения работает нормально, я думаю, вы неправильно настроили свое приложение для использования утилиты переноса. 16.05.2016
  • У меня возникла проблема с использованием AWS Mobile SDK версии 2.2.15. Внимательно изучив их собственный S3TransferUtilitySample, я предпринял пару попыток получить файл, загруженный в корзину Amazon S3 самостоятельно.

    Моя первая попытка состояла в том, чтобы попытаться вызвать метод TransferUtility _1_ из собственной AsyncTask Android, внутри метода _2_. Безуспешно, и после чтения об этой проблеме я вдохновился попробуйте переместить вызовы SDK за пределы AsyncTask и в поток пользовательского интерфейса под _3_, подозревая, что сам вызов является асинхронным, а AsyncTask выполняет сборку мусора для объектов AWS SDK. По-прежнему не повезло, никаких исключений не выдается, и нет признаков того, что что-то пойдет не так, за исключением того, что файл на самом деле не загружается.

    Моя вторая попытка заключалась в следующем: этот пример. Я загрузил исходный код и смог предоставить приложению правильный идентификатор пула удостоверений, регион, сегмент, ключ и тестовый файл jpeg. Я запустил приложение, и звонки были сделаны. Файл попал в AWS S3 без каких-либо проблем.

    Я скопировал их точные методы во вспомогательный класс своего приложения и сделал все объекты AWS SDK статическим полем класса, но я все еще работаю в ту же проблему, что исключения не выбрасываются. В итоге я сделал поля нестатическими и создал вспомогательный класс как объект в своей основной деятельности, с уверенностью предполагая, что объект не будет обрабатываться сборкой мусора. Еще ничего! Никаких признаков сбоя в этих вызовах!

    ​ Я решил быть очень щедрым на ведение журнала с использованием метода _4_ Android, наблюдая за каждым шагом, и он даже доходит до метода TransferUtility _5_, но даже имея TransferListener установлен и полон строк логирования, изменения статуса нет, _6_ не вызывается. _7_ TransferUtility и полученный в результате объект TransferObserver не сообщают ничего, похожего на запуск тестового приложения.

    ​ Вот несколько замечаний:
    * Здесь используется правильный идентификатор пула удостоверений, никаких проблем с этим
    * Я пытался использовать как версию 2.2.15, так и 2.2.13
    * Все включенные зависимости являются файлами .jar, проект не Gradle (пока)
    * Служба объявлена ​​в манифест точно такой же, как в примерах
    * Ошибок сборки нет, Android Studio отлично строит проект
    * Объект TransferListener не запускает _8_, _9_ или _10_

    ​ Есть кто-нибудь сталкивался с такой странной проблемой с AWS S3 SDK? Любые предложения о том, как лучше отладить эту проблему?

    16.05.2016

  • 2

    Я обнаружил это, перетащив образец действия прямо в свое приложение и осознав, что дочерние приложения также нуждаются в этом объявлении действия. Дочерние приложения сами по себе не имеют кода, но без объявления в собственном манифесте они не знают, что существуют действия/службы, на которые они ссылаются. В этом случае Amazon молча отказывался загружать, потому что сервис не был объявлен для конкретного приложения.

    Я попробовал. К сожалению, это не решило проблему.

    17.05.2016
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...