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);
        }
    }
}
我查过了。j
avax.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”行不是这样做的吗?