java.lang.NoClassDefFoundError : com. google.gson.stream.JsonReader 在使用 Amazon S3 上传图像时在 android 中的 Pre-Lollipop 上出错

标签 java android amazon-web-services amazon-s3 gson

将图像上传到 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/

相关文章:

php - 从 PHP 向 MYSQL 引入 NULL 字段

Android Library Declare-Styleable 运行时错误

ubuntu - 无法以 root 身份通过 SSH 进入 EC2 服务器 - 请以用户 "ubuntu"而不是用户 "root"登录

java - 从任务栏关闭浏览器时销毁 session

java - 在思科交换机/路由器中执行脚本

java - 对于这种情况,是单例,工厂还是其他更好的东西?

amazon-web-services - Cloudwatch 自定义指标 - 内存利用率 --from-cron 不起作用

java - 贪吃蛇游戏 : How to deal with a interrupt thread and with a deadlock

android - 工具栏 : overflow menu button always showing

javascript - 使用带有 AWS S3 的签名请求并上传照片?