使用Java+Amplify从AWS S3向Android Studio应用下载文件时崩溃,求解决
AWS Amplify Android 下载S3文件应用崩溃问题排查与解决
Amplify未完成初始化
如果downloadFiles方法在Amplify初始化前调用,必然导致崩溃。必须确保Amplify在Application类中完成初始化,而非仅在Activity中:public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); try { Amplify.addPlugin(new AWSCognitoAuthPlugin()); Amplify.addPlugin(new AWSS3StoragePlugin()); Amplify.configure(getApplicationContext()); Log.i("MyAmplifyApp", "Amplify初始化成功"); } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Amplify初始化失败", error); } } }同时在
AndroidManifest.xml的<application>标签中指定android:name=".MyApp"。文件路径拼接错误
原代码中直接拼接字符串创建文件路径,可能因路径格式问题导致异常。改用File类的构造方法创建路径更可靠:File downloadFile = new File(getApplicationContext().getFilesDir(), "download.txt");权限配置缺失
检查AWS端Cognito身份池的角色权限,确保对应角色拥有S3对象的读取权限:
登录AWS控制台,找到对应Cognito身份池的未认证/认证角色,添加以下权限策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::你的存储桶名称/test.txt" } ] }调用时机问题
避免在Activity的onCreate方法中直接调用downloadFiles,建议在onStart或Amplify初始化完成后再执行下载操作,确保依赖服务已就绪。
修改后的完整示例代码:
public void downloadFiles() { File downloadFile = new File(getApplicationContext().getFilesDir(), "download.txt"); Amplify.Storage.downloadFile( "test.txt", downloadFile, StorageDownloadFileOptions.defaultInstance(), progress -> Log.i("MyAmplifyApp", "下载进度: " + progress.getFractionCompleted()), result -> Log.i("MyAmplifyApp", "下载成功: " + result.getFile().getName()), error -> Log.e("MyAmplifyApp", "下载失败", error) ); }
内容的提问来源于stack exchange,提问作者xgyu
相关产品推荐
相关产品推荐

