Javamail getContent()致命错误java.lang.NoClassDefFoundError
我正在尝试制作一个应用程序来“简单地”阅读纯文本电子邮件(并且只有纯文本。我发送电子邮件,所以我知道它只有纯文本)。Javamail getContent()致命错误java.lang.NoClassDefFoundError,java,android,email,jakarta-mail,Java,Android,Email,Jakarta Mail,我正在尝试制作一个应用程序来“简单地”阅读纯文本电子邮件(并且只有纯文本。我发送电子邮件,所以我知道它只有纯文本)。 我在这里和那里收集代码来完成它。 我最终成功地阅读了“主题”、“sentDate”和其他内容,但没有阅读“内容”。这是我想读的内容… 一切正常,但当我调用getContent()时,出现了一个致命错误 我在app\libs中使用javax.mail.jar=javamail 1.6.2。 我试过mail.jar和activation.jar,但都没用。 我试图将所有读取的代码放入
我在这里和那里收集代码来完成它。
我最终成功地阅读了“主题”、“sentDate”和其他内容,但没有阅读“内容”。这是我想读的内容…
一切正常,但当我调用getContent()时,出现了一个致命错误 我在app\libs中使用javax.mail.jar=javamail 1.6.2。
我试过mail.jar和activation.jar,但都没用。
我试图将所有读取的代码放入一个“空”中,但不起作用。
即使在打字的时候
Object content = message.getContent();
它不起作用
在舱单上,我有
<uses-permission android:name="android.permission.INTERNET" />
mainActivity.java:
package myName.myAPP;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String msg = "";
String from;
String subject;
String sentDate;
String contentType
// -----------------------------------------------StricMode ERROR--------------------------------------
// Ces deux lignes sont à ajouter si l'on veut éviter une erreur:
// at android.os.strictmode$androidblockguardpolicy.onnetwork
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
// -----------------------------------------------StricMode ERROR--------------------------------------
Properties connectionProperties = new Properties();
Session session = Session.getDefaultInstance(connectionProperties,null);
try {
Store store = session.getStore("pop3");
store.connect("pop.free.fr", "user", "password");
Folder folderInbox = store.getFolder("Inbox");
folderInbox.open(Folder.READ_ONLY);
Message messages[] = folderInbox.getMessages();
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
Address[] fromAddress = message.getFrom();
from = fromAddress[0].toString();
subject = message.getSubject();
sentDate = message.getSentDate().toString();
contentType = message.getContentType();
String content = message.getContent().toString();
msg = msg + from + subject + sentDate + contentType + " %%%%% ";
}
folderInbox.close(false);
store.close();
((TextView)findViewById(R.id.MsgContent)).setText(msg);
}catch (Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String trace = sw.toString();
((TextView)findViewById(R.id.MsgContent)).setText(trace);
}
}
}
我查过了。javax.mail.internet.MimeBodyPart$MimePartDataHandler
位于javax.mail.jar中
我迷路了。
需要帮助才能继续
希望我的英语比爪哇更好。天堂存在
要解决此问题,必须不编译“javax.mail.jar”,而是提供Build.gradle(模块:app)如图所示:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
packagingOptions {
pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
}
defaultConfig {
applicationId "myNam.myAPP"
minSdkVersion 18
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
}
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.sun.mail:android-mail:1.6.2'
compile 'com.sun.mail:android-activation:1.6.2'
provided files('libs/javax.mail.jar')
}
重点是:
packagingOptions {
pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
}
repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
dependencies {
compile 'com.sun.mail:android-mail:1.6.2'
compile 'com.sun.mail:android-activation:1.6.2'
provided files('libs/javax.mail.jar')
}
有了这个,它就完美地工作了。一周的绝望和哭泣。
非常感谢。
天堂存在 要解决此问题,必须不编译“javax.mail.jar”,而是提供
Build.gradle(模块:app)如图所示:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
packagingOptions {
pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
}
defaultConfig {
applicationId "myNam.myAPP"
minSdkVersion 18
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
}
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.sun.mail:android-mail:1.6.2'
compile 'com.sun.mail:android-activation:1.6.2'
provided files('libs/javax.mail.jar')
}
重点是:
packagingOptions {
pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
}
repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
dependencies {
compile 'com.sun.mail:android-mail:1.6.2'
compile 'com.sun.mail:android-activation:1.6.2'
provided files('libs/javax.mail.jar')
}
有了这个,它就完美地工作了。一周的绝望和哭泣。
非常感谢。
您的打包应用程序中似乎没有包含JavaMail类。Android的一般JavaMail说明如下。感谢回复。我想是的,但我不明白为什么。为什么JavaMail类可以与.getFrom().getSentDate().getSubject().getcontentType()完美结合,但不能与.getContent()完美结合。然而,它是同一个图书馆。我将javax.mail.jar放在app/libs文件夹中,并将其包含在AndroidStudio中带有“项目结构>依赖性”的应用程序中。它在我的graddle中添加了“compile files('libs/javax.mail.jar')。如果(如javaMail网站所示)我把“compile'com.sun.mail:android mail:1.6.2'”和“compile'com.sun.mail:android activation:1.6.2'”放在上面,它会抛出一个错误:“错误:任务执行失败”:应用程序:transformClassesWithDexForDebug”“>com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexException:多个dex文件定义Lcom/sun/mail/auth/MD4;“我不知道如何处理”javax.mail.jar“。编译还是不编译…您的打包应用程序中似乎没有包含JavaMail类。Android的一般JavaMail说明是。感谢您的响应。我想是的,但我不明白为什么。为什么JavaMail类与.getFrom().getSentDate().getSubject()完美配合使用.getcontentType()但不与.getContent()一起使用。但是它是同一个库。我将javax.mail.jar放在app/libs文件夹中,并将其包含在AndroidStudio中的“Project structure>dependencies”应用中。它在我的graddle中添加了“compile files('libs/javax.mail.jar')。如果(如javaMail网站所示)我将“compile'com.sun.mail:android mail:1.6.2'”和“编译'com.sun.mail:android激活:1.6.2',它会抛出一个错误:“错误:任务执行失败”:app:transformClassesWithDexForDebug'>com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexException:多个dex文件定义Lcom/sun/mail/auth/MD4;“不知道如何处理”javax.mail.jar“.编译或不编译…我不是gradle或Android专家,但。。。如果您删除javax.mail.jar的副本并删除提供的行,它能工作吗?我认为编译行可以完成将它包含在应用程序中所需的一切。需要为mainActivity.java中的导入提供或编译javax.mail.jar。如果我删除javax.mail.jar行,import.javax.mail.*在mainActivity上是红色的。“编译”行不是这样做的吗?我不是gradle或Android专家,但是。。。如果您删除javax.mail.jar的副本并删除提供的行,它能工作吗?我认为编译行可以完成将它包含在应用程序中所需的一切。需要为mainActivity.java中的导入提供或编译javax.mail.jar。如果我删除javax.mail.jar行,import.javax.mail.*在mainActivity上是红色的。“compile”行不是这样做的吗?