我正在开发与 Picasa 网络相册交互的 android 应用程序。所以我尝试使用以下代码上传照片。
protected Integer doInBackground(String... params) {
int index = 0;
int count = 0;
URL albumPostUrl = null;
try {
albumPostUrl = new URL("https://picasaweb.google.com/data/feed/api/user/"+googuserName+"/albumid/" + params[1]);
}
catch (Exception ex)
{
ex.printStackTrace();
}
while(index < totalFBPicsCount)
{
PhotoEntry myPhoto = new PhotoEntry();
myPhoto.setTitle(new PlainTextConstruct(params[2] + "_" + index));
myPhoto.setClient("Photo Sync");
MediaFileSource myMedia = new MediaFileSource(new File(params[0] + "/" + params[2] + "_" +index + ".jpg"), "image/jpeg");
myPhoto.setMediaSource(myMedia);
try
{
PhotoEntry returPic = myService.insert(albumPostUrl, myPhoto);
}
catch (RuntimeException ex)
{
ex.printStackTrace();
}
catch (Exception ex)
{
ex.printStackTrace();
Log.e("Sai", "PhotSync", ex);
}
index++;
}
return null;
}
在执行 myService.insert(albumPostUrl, myPhoto)
行时出现以下异常。以下是 logcat 跟踪:
06-05 01:18:04.086 4272-4422/krishtech.photosync E/dalvikvm﹕
Could not find class 'com.google.gdata.data.media.MediaBodyPart$MediaSourceDataHandler',
referenced from method com.google.gdata.data.media.MediaBodyPart.initMediaDataHandler
06-05 01:18:04.091 4272-4422/krishtech.photosync E/dalvikvm﹕ Could not find class 'javax.activation.DataHandler', referenced from method com.google.gdata.data.media.MediaBodyPart.initMediaDataHandler
06-05 01:18:04.101 4272-4422/krishtech.photosync E/dalvikvm﹕ Could not find class 'javax.mail.internet.CachedDataHandler', referenced from method javax.mail.internet.MimeBodyPart.createCachedDataHandler
06-05 01:18:04.116 4272-4422/krishtech.photosync E/dalvikvm﹕ Could not find class 'javax.activation.DataHandler', referenced from method javax.mail.internet.MimeBodyPart.attachFile
06-05 01:18:04.131 4272-4422/krishtech.photosync E/dalvikvm﹕ Could not find class 'javax.activation.DataHandler', referenced from method javax.mail.internet.MimeBodyPart.getDataHandler
06-05 01:18:04.146 4272-4422/krishtech.photosync E/dalvikvm﹕ Could not find class 'javax.activation.DataHandler', referenced from method javax.mail.internet.MimeBodyPart.setContent
06-05 01:18:04.146 4272-4422/krishtech.photosync E/dalvikvm﹕ Could not find class 'javax.activation.DataHandler', referenced from method javax.mail.internet.MimeBodyPart.setContent 06-05 01:18:08.866 4272-4422/krishtech.photosync E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #3
Process: krishtech.photosync, PID: 4272
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NoClassDefFoundError: javax.activation.DataHandler
at javax.mail.internet.MimeBodyPart.setContent(MimeBodyPart.java:678)
at com.google.gdata.data.media.MediaBodyPart.<init>(MediaBodyPart.java:95)
at com.google.gdata.data.media.MediaMultipart.<init>(MediaMultipart.java:126)
at com.google.gdata.client.media.MediaService.insert(MediaService.java:390)
at krishtech.photosync.MainActivity$startBackuptoGoogle.doInBackground(MainActivity.java:702)
at krishtech.photosync.MainActivity$startBackuptoGoogle.doInBackground(MainActivity.java:671)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
经过一些搜索发现我必须使用来自 here 的 Java Mail android 端口.但是当我添加 mail.jar
、activation.jar
和 additional.jar
时
并尝试构建应用程序时,我在 Gradle 控制台上收到以下错误。
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: com/sun/mail/handlers/message_rfc822.class
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
然后我在外部库中看到,除了 libs 文件夹中的库(mail.jar、activation.jar、additional.jar)之外,还有库 activation-1.1 和 mail-1.4。外部库(mail-1.4 和 activation-1.1)是自动包含的,因为它们是我用来从 picasa 获取数据的 Google 数据 Java 客户端库的必需依赖项。请在下面找到 build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "krishtech.photosync"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
compile 'com.facebook.android:facebook-android-sdk:4.1.0'
compile 'com.google.android.gms:play-services-identity:7.5.0'
compile('com.google.gdata:core:1.47.1')
compile('com.google.api-client:google-api-client:1.16.0-rc') {
exclude(group: 'xpp3', module: 'xpp3')
exclude(group: 'org.apache.httpcomponents', module: 'httpclient')
exclude(group: 'junit', module: 'junit')
exclude(group: 'com.google.android', module: 'android')
}
compile('com.google.api-client:google-api-client-android:1.16.0-rc') {
exclude(group: 'com.google.android.google-play-services', module: 'google-play-services')
}
compile files('libs/activation.jar')
compile files('libs/additionnal.jar')
compile files('libs/mail.jar')
}
所以现在我正处于修复状态。如果我必须删除外部库文件夹中的 mail-1.4(我做不到,请告诉我该怎么做)然后我可能会导致 gdata 库出现故障,如果我不包括邮件的 java 端口.jar 我可能无法上传照片。请建议我如何解决这个问题。
最佳答案
好吧,我解决了这个问题。诀窍是在构建应用程序时排除 com.google.gdata:core:1.47.1
随附的 mail-1.4.jar
。对 build.gradle 进行了以下更改,现在我的应用程序正在运行,并且能够使用 Java 邮件库的 android 端口将图片上传到 Picasa。
compile('com.google.gdata:core:1.47.1') {
exclude(group: 'javax.mail', module: 'mail')
}
关于java - 构建 android 应用程序时出错 : java. util.zip.ZipException : duplicate entry: com/sun/mail/handlers/message_rfc822. 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30659508/