2012-05-17 38 views
1

我一直在嘗試使用AWS開發工具包上傳視頻到一桶S3服務。AWS開發工具包NoClassDefFoundError:com.amazonaws.services.s3.AmazonS3Client

這是我從亞馬遜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 
+0

可能與你的資源問題,如main.xml中 –

+0

@omidnazifi,你是什麼意思? 「AWS SDK」沒有xml嗎 – thepoosh

+0

是你的庫在「libs」文件夾中嗎?並正確添加到您的項目? –

回答

6

你的代碼給NoClassDefFoundError,因爲你沒有SDK的庫添加到您的項目。這裏是你如何能做到這

  • 您的項目名稱右鍵 - >新建 - >文件夾並將其命名爲「libs」(不" S)
  • 你應該在這個庫文件夾添加"aws-android-sdk-X.X.X-debug.jar"
  • 右鍵單擊您的項目名稱 - >屬性 - >從左側選擇Java構建路徑 - >單擊添加罐 - >導航到我們創建的項目libs
  • 選擇"aws-android-sdk-X.X.X-debug.jar"
  • 單擊確定,你就完成了。

希望這有助於

+0

好吧,現在唯一的問題是:我得到一個'unknownHost'錯誤,任何想法如何解決這個問題? – thepoosh

+1

您是否在清單文件中添加了互聯網權限?你可以通過在AndroidManifest.xml的應用程序標籤之外添加

+0

OMG我是這樣的newb:S我怎麼忘記了這個? ?!?! – thepoosh

相關問題