我本来不想问这个问题的,但是我没有解决这个问题的办法!
我在从IMAP服务器接收消息时遇到了问题。
错误上写着“引起: java.lang.ClassNotFoundException:没有在路径上找到类"java.awt.datatransfer.Transferable”.“这是我的密码:
enter String test(){
String all="";
try{
class Runner extends AsyncTask<Object, String, String> {
@Override
protected String doInBackground(Object... params) {
Looper.prepare();
String all ="";
try{
Message[] msgs = ReceiveMail("imap.gmail.com","993","USER@gmail.com","PASS"); // After passing this line, error logging says error is in this line!
for(Message m: msgs){
all+=m.getSubject()+"\n"+m.getContent().toString()+"\n\n"; // Error shows here, but popups above
}
return all;
}catch (Exception e){
e.printStackTrace();
}
Looper.loop();
return all;
}
}
Runner r = new Runner();
all = r.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, this).get();
}catch (Exception e){
e.printStackTrace();
}
return all;
}
private Message[] ReceiveMail(String host,String port,String user,String pass){
try{
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.host", host);
props.setProperty("mail.imaps.port", port);
props.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imaps.socketFactory.fallback", "false");
Session imapSession = Session.getInstance(props);
Store store = imapSession.getStore("imaps");
store.connect(host, user, pass);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
return inbox.getMessages();
}catch (Exception e){
e.printStackTrace();
//log_all("ReceiveMail function: "+e.getMessage());
}
return null;
}有什么问题吗?
备注当我不使用AsyncTask错误时,出现“主线程中的网络”。
溶液
下载这些并将它们作为库添加。
将javax.*从module settings的依赖项选项卡中删除。
这会解决问题的。
发布于 2017-06-07 13:54:42
因为它找不到某个类,也许您缺少了一个外部jar?
编辑
您可以使用JavaMail API来处理电子邮件任务。JavaMail API可在JavaEE包中使用,其jar可供下载。遗憾的是,它不能直接在Android应用程序中使用,因为它使用的是在Android中完全不兼容的AWT组件。(这就是为什么你会犯这个错误)
您可以在以下位置找到JavaMail的Android端口:http://code.google.com/p/javamail-android/
将jars添加到应用程序并使用SMTP方法
发布于 2017-06-07 19:49:30
JavaMail API参考实现版本1.5.5及更高版本构建了对安卓的支持,并包含了对OAuth2的支持。根据文件:
Android不提供与Java兼容的运行时,因此无法运行标准的JavaMail发行版。相反,安卓有一个特殊版本的JavaMail。这个特殊版本的JavaMail依赖于JavaBeans激活框架的一个特殊版本。 您可以通过为您的安卓应用程序在build.gradle文件中添加以下内容来尝试此版本:
android {
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.5.6'
compile 'com.sun.mail:android-activation:1.5.6'
}https://stackoverflow.com/questions/44414569
复制相似问题