1

我创建了一个将图像上传到 AWS S3 存储桶的函数。当按下按钮时调用该函数。这适用于新的 Gradle 构建后的第一个实例。但是当我再次尝试调用该函数时,出现以下错误:

E/StorageQuickstart: The client issued a subsequent call to `Amplify.configure`
after the first had already succeeded.
btnSubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Upload to AWS S3
        File imageFile = new File(imgFilePath);
        uploadImage(imageFile.getName(), imgFilePath);
        finish();
    }
});

功能:

// AWS Amplify
private void uploadImage(String imageName, String imageAbsolutePath) {
    // Amplify Initialize
    AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {
        @Override
        public void onResult(UserStateDetails userStateDetails) {
            try {
                Amplify.addPlugin(new AWSS3StoragePlugin());
                Amplify.configure(getApplicationContext());
                Log.i("StorageQuickstart", "Amplify Initialized");
                Amplify.Storage.uploadFile(
                    imageName,
                    imageAbsolutePath,
                    new ResultListener<StorageUploadFileResult>() {
                        @Override
                        public void onResult(StorageUploadFileResult result) {
                            Log.i("StorageQuickStart", "Successfully uploaded: " + result.getKey());
                            Log.i("ImageURL", getS3ObjectUrl(imageName));
                        }

                        @Override
                        public void onError(Throwable error) {
                            Log.e("StorageQuickstart", "Upload error.", error);
                        }
                    }
                );
            } catch (Exception e) {
                Log.e("StorageQuickstart", e.getMessage());
            }
        }

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

1 回答 1

2

这是因为AWSMobileClient.getInstance().initialize()每次单击按钮时都会调用方法。而初始化应该只进行一次。因此,您可以在启动器活动中调用方法,也可以在应用程序类中使用它,如文档AWSMobileClient.getInstance().initialize()中的初始化放大部分所述

于 2020-04-03T11:43:35.340 回答