【问题标题】:AWS SDK NoClassDefFoundError: com.amazonaws.services.s3.AmazonS3ClientAWS 开发工具包 NoClassDefFoundError:com.amazonaws.services.s3.AmazonS3Client
【发布时间】:2012-05-24 19:14:28
【问题描述】:

我一直在尝试使用 AWS SDK 将我拍摄的视频上传到 S3 服务桶。

这是我从 Amazon 示例中获取的用于 S3 上传的代码。我唯一不同的是:

  1. 不创建新存储桶,而是重复使用已经存在的存储桶。
  2. 为图像所在的文件使用预先确定的 Uri。

    public void uploadToS3(View v) {
        AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(
            Constants.ACCESS_KEY_ID, Constants.SECRET_KEY));
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(fileUri, filePathColumn,
            null, null, null);
        cursor.moveToFirst();
    
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String filePath = cursor.getString(columnIndex);
        cursor.close();
    
        // Put the image data into S3.
        try {
            //s3Client.createBucket(Constants.getPictureBucket());
    
            PutObjectRequest por = new PutObjectRequest(
                    Constants.getPictureBucket(), Constants.PICTURE_NAME,
                    new java.io.File(filePath)); // Content type is determined
                                                 // by file extension.
            s3Client.putObject(por);
        } catch (Exception exception) {
            // displayAlert( "Upload Failure", exception.getMessage() );
        }
    }
    

问题是,一旦我尝试创建 AmazonS3Client,应用就会崩溃并出现 noClassFound 异常。

这是我的 Logcat:

05-17 10:42:02.555: E/AndroidRuntime(20310): FATAL EXCEPTION: main
05-17 10:42:02.555: E/AndroidRuntime(20310): java.lang.IllegalStateException: Could not execute method of the activity
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.view.View$1.onClick(View.java:2154)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.view.View.performClick(View.java:2538)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.view.View$PerformClick.run(View.java:9152)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.os.Handler.handleCallback(Handler.java:587)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.os.Looper.loop(Looper.java:123)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.app.ActivityThread.main(ActivityThread.java:3691)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at java.lang.reflect.Method.invokeNative(Native Method)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at java.lang.reflect.Method.invoke(Method.java:507)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at dalvik.system.NativeStart.main(Native Method)
05-17 10:42:02.555: E/AndroidRuntime(20310): Caused by: java.lang.reflect.InvocationTargetException
05-17 10:42:02.555: E/AndroidRuntime(20310):    at java.lang.reflect.Method.invokeNative(Native Method)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at java.lang.reflect.Method.invoke(Method.java:507)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at android.view.View$1.onClick(View.java:2149)
05-17 10:42:02.555: E/AndroidRuntime(20310):    ... 11 more
05-17 10:42:02.555: E/AndroidRuntime(20310): Caused by: java.lang.NoClassDefFoundError: com.amazonaws.services.s3.AmazonS3Client
05-17 10:42:02.555: E/AndroidRuntime(20310):    at com.thepoosh.aws.s3upload.android.CameraToAmazonaws3Activity.uploadToS3(CameraToAmazonaws3Activity.java:63)
05-17 10:42:02.555: E/AndroidRuntime(20310):    ... 14 more
05-17 10:42:02.555: E/AndroidRuntime(20310): Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.s3.AmazonS3Client in loader dalvik.system.PathClassLoader[/data/app/com.thepoosh.aws.s3upload.android-1.apk]
05-17 10:42:02.555: E/AndroidRuntime(20310):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
05-17 10:42:02.555: E/AndroidRuntime(20310):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
05-17 10:42:02.555: E/AndroidRuntime(20310):    ... 15 more

【问题讨论】:

  • 可能与您的资源相关的问题,例如 main.xml
  • @omidnazifi,你是什么意思? AWS SDK没有xml
  • 您的库在“libs”文件夹中吗?并正确添加到您的项目中?
  • @MuratNafiz,我的项目中没有 libs 文件夹。我应该添加它并在那里放一些东西吗?

标签: android amazon-s3 noclassdeffounderror aws-sdk


【解决方案1】:

您的代码给出了NoClassDefFoundError,因为您没有将sdk 的库添加到您的项目中。这是你可以做到的方法

  • 右键单击你的项目名称->新建->文件夹并将其命名为“libs”(不带"s)
  • 你应该在这个库文件夹中添加"aws-android-sdk-X.X.X-debug.jar"
  • 右键单击您的项目名称 -> 属性 -> 从左侧选择 Java 构建路径 -> 单击添加 Jars -> 导航到我们创建的项目 libs
  • 选择"aws-android-sdk-X.X.X-debug.jar"
  • 单击“确定”即可完成。

希望对你有帮助

【讨论】:

  • 好吧,现在唯一的问题是:我收到 unknownHost 错误,知道如何解决这个问题吗?
  • 您是否在清单文件中添加了互联网权限?您可以通过在 AndroidManifest.xml 中的应用程序标签之外添加 来做到这一点
  • 天啊,我是个新手:我怎么忘了这个?!?!?!
  • 谢谢。这也解决了我的问题。但是 Jar 是 6MB!可以只用s3上传图片吗?
  • 公共最终类 java.lang.Class 实现 java.io.Serializable、java.lang.reflect.AnnotatedElement、java.lang.reflect.GenericDeclaration、java.lang.reflect.Type
猜你喜欢
  • 2011-11-10
  • 2015-04-07
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2012-09-21
相关资源
最近更新 更多