将图像上传到 amazon s3 存储桶,在 android 5 及更高版本上运行良好,但在 Pre-Lollipop 上出现 Gson 错误。下面是我正在使用的代码。
错误:
FATAL EXCEPTION: TransferSerivce-AWSTransferUpdateHandlerThread
java.lang.NoClassDefFoundError: com.google.gson.stream.JsonReader
at com.amazonaws.util.json.GsonFactory$GsonReader.<init>(GsonFactory.java:50)
at com.amazonaws.util.json.GsonFactory.getJsonReader(GsonFactory.java:38)
at com.amazonaws.util.json.JsonUtils.getJsonReader(JsonUtils.java:101)
at com.amazonaws.util.json.JsonUtils.jsonToMap(JsonUtils.java:127)
at com.amazonaws.util.json.JsonUtils.jsonToMap(JsonUtils.java:166)
at com.amazonaws.mobileconnectors.s3.transferutility.TransferRecord.updateFromDB(TransferRecord.java:134)
at com.amazonaws.mobileconnectors.s3.transferutility.TransferDBUtil.getTransferById(TransferDBUtil.java:669)
at com.amazonaws.mobileconnectors.s3.transferutility.TransferService.execCommand(TransferService.java:284)
at com.amazonaws.mobileconnectors.s3.transferutility.TransferService$UpdateHandler.handleMessage(TransferService.java:224)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)
这是我用来上传图片的代码:
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setConnectionTimeout(120000); // setting connection time out to be 2 minutes.
clientConfig.withConnectionTimeout(120000); // setting connection timeout to be 2 minutes.
AmazonS3Client awsClient = new AmazonS3Client(
new BasicAWSCredentials("accessKey", "secreatKey"),
clientConfig);
imagePath = "A" + "/" + compressedFile.getName();
TransferUtility transferUtility = new TransferUtility(awsClient, getBaseContext());
TransferObserver observer = null;
try {
observer = transferUtility.upload("bucket-name", imagePath, compressedFile);
} catch (Exception e) {
Log.e(Tag,""+e.toString());
}
上面的代码在 lollipop 及更高版本上运行良好,但在 pre lollipop 上会产生问题
添加了 Gson 依赖项,认为它可能会有所帮助。但是没有运气
Gradle 依赖:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'commons-codec:commons-codec:1.5'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.amazonaws:aws-android-sdk-core:2.2.14'
compile 'com.amazonaws:aws-android-sdk-cognito:2.2.14'
compile 'com.amazonaws:aws-android-sdk-s3:2.2.14'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.code.gson:gson:2.6.2' // added gson hoping
}
找了很多,还是没有头绪。任何帮助深表感谢。
最佳答案
我没有使用 android 平台的经验。但导游here可能会帮助您解决问题。请注意设置指南中提到的以下警告。
For Android, you MUST place the jar files in a directory named "libs" so that the APK packager can find them. Otherwise, you will get a NoClassDefFoundError error at runtime.
关于java.lang.NoClassDefFoundError : com. google.gson.stream.JsonReader 在使用 Amazon S3 上传图像时在 android 中的 Pre-Lollipop 上出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36475234/