在android +中添加mail.jar,activation.jar,additionnal.jar引起:java.lang.NoClassDefFoundError:

时间:2013-10-12 10:07:13

标签: android email javamail noclassdeffounderror runtimeexception

我是android的初学者。我正在创建一个应用程序,它具有在没有用户干预的情况下自动向另一个人发送电子邮件的功能。所以我添加了 mail.jar,additionnal.jar,activation.jar 进入我的project.i正在为Android 2.2或更高版本开发一个应用程序。我添加了jar文件 1.右键单击项目>导入>浏览并将上面的jar添加到名为lib.my的文件夹中,项目没有lib / libs文件夹,因此对文件夹lib进行了处理。 2.右键单击项目>属性> java构建路径>库>添加jars.i将3个罐子添加到项目中,它现在出现在项目中。因此,清除编写代码时的先前引用错误。 但是当我运行我的应用程序时,应用程序每次调用Mail.java时都会崩溃,我在app中执行发送邮件。这是我的完整代码

Emailactivity.java

     class email extends AsyncTask<String, Void, Boolean>
{
    private Exception exception;
    int f=0;
    protected Boolean doInBackground(String...uname) 
    {
        try {
                f=0;
                Mail m = new Mail(fmailadd, password); 

              String[] toArr = {tmailadd, "anishubais@yahoo.co.in"}; 
              //String to="anishubais@gmail.com";
              m.setTo(toArr); 
              m.setFrom(fmailadd);            
              m.setSubject(type);
              m.setBody("This is an email sent by anish from android assistant."); 

              try 
              { 
                //m.addAttachment("/sdcard/filelocation"); 

                if(m.send())
                { 
                  //Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show(); 
                  f=1;
                  Log.e("MailApp", "sucess");
                } else 
                { 
                  //Toast.makeText(MainActivity.this, "Email was not sent.", Toast.LENGTH_LONG).show(); 
                  f=0;
                  Log.e("MailApp", "failed");
                } 
              } 
              catch(Exception e) 
              { 
                //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show(); 
                Log.e("MailApp", "Could not send email", e); 
                f=0;
              } 
              if(f==1)
                  return true;
              else
                  return false;
        } catch (Exception e) {
            this.exception = e;
            return false;
        }
    }

}

调用此asynctask在Emailactivity内部如下

    new email().execute("anish");

Mail.java:-在这里发送我的邮件

     package androassist.mypack;

     import java.util.Date; 
     import java.util.Properties; 
     import javax.activation.CommandMap; 
     import javax.activation.DataHandler; 
     import javax.activation.DataSource; 
     import javax.activation.FileDataSource; 
     import javax.activation.MailcapCommandMap; 
     import javax.mail.BodyPart; 
     import javax.mail.Multipart; 
     import javax.mail.PasswordAuthentication; 
     import javax.mail.Session; 
     import javax.mail.Transport; 
     import javax.mail.internet.InternetAddress; 
      import javax.mail.internet.MimeBodyPart; 
      import javax.mail.internet.MimeMessage; 
      import javax.mail.internet.MimeMultipart; 

      public class Mail extends javax.mail.Authenticator { 
  private String _user; 
  private String _pass; 

  private String[] _to; 
  private String _from; 

  private String _port; 
  private String _sport; 

  private String _host; 

  private String _subject; 
  private String _body; 

  private boolean _auth; 

  private boolean _debuggable; 

  private Multipart _multipart; 


  public Mail() { 
    _host = "smtp.gmail.com"; // default smtp server 
    _port = "465"; // default smtp port 
    _sport = "465"; // default socketfactory port 

    _user = ""; // username 
    _pass = ""; // password 
    _from = ""; // email sent from 
    _subject = ""; // email subject 
    _body = ""; // email body 

    _debuggable = false; // debug mode on or off - default off 
    _auth = true; // smtp authentication - default on 

    _multipart = new MimeMultipart(); 

    // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. 
    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
    CommandMap.setDefaultCommandMap(mc); 
  } 

  public Mail(String user, String pass) { 
    this(); 

    _user = user; 
    _pass = pass; 
  } 

  public boolean send() throws Exception { 
    Properties props = _setProperties(); 

    if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) { 
      Session session = Session.getInstance(props, this); 

      MimeMessage msg = new MimeMessage(session); 

      msg.setFrom(new InternetAddress(_from)); 

      InternetAddress[] addressTo = new InternetAddress[_to.length]; 
      for (int i = 0; i < _to.length; i++) { 
        addressTo[i] = new InternetAddress(_to[i]); 
      } 
        msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); 

      msg.setSubject(_subject); 
      msg.setSentDate(new Date()); 

      // setup message body 
      BodyPart messageBodyPart = new MimeBodyPart(); 
      messageBodyPart.setText(_body); 
      _multipart.addBodyPart(messageBodyPart); 

      // Put parts in message 
      msg.setContent(_multipart); 

      // send email 
      Transport.send(msg); 

      return true; 
    } else { 
      return false; 
    } 
  } 

  public void addAttachment(String filename) throws Exception { 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 

    _multipart.addBodyPart(messageBodyPart); 
  } 

  @Override 
  public PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(_user, _pass); 
  } 

  private Properties _setProperties() { 
    Properties props = new Properties(); 

    props.put("mail.smtp.host", _host); 

    if(_debuggable) { 
      props.put("mail.debug", "true"); 
    } 

    if(_auth) { 
      props.put("mail.smtp.auth", "true"); 
    } 

    props.put("mail.smtp.port", _port); 
    props.put("mail.smtp.socketFactory.port", _sport); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

    return props; 
  } 

  // the getters and setters 
  public String getBody() 
  { 
    return _body; 
  } 

  public void setBody(String _body)
  { 
    this._body = _body; 
  } 
  public String getTo() 
  { 
        return _body; 
  } 

  public void setTo(String[] _to) 
  { 
        this._to = _to; 
  } 
  public String getFrom() 
  { 
        return _from; 
  } 

  public void setFrom(String _from) 
  { 
        this._from = _from; 
  } 
  public String getSubject() 
  { 
        return _subject; 
  } 

  public void setSubject(String _subject) 
  { 
        this._subject = _subject; 
  } 

} 

但是当调用mail.java执行它时,我的应用程序崩溃了,并强行关闭

logcat错误

    10-12 09:32:46.601: E/email(1779): anishubais13@gmail.com
     10-12 09:32:46.601: E/email(1779): anishubais@gmail.com
     10-12 09:32:46.601: W/dalvikvm(1779): Unable to resolve superclass of Landroassist/mypack/Mail; (186)
      10-12 09:32:46.601: W/dalvikvm(1779): Link of class 'Landroassist/mypack/Mail;' failed
    10-12 09:32:46.601: E/dalvikvm(1779): Could not find class  'androassist.mypack.Mail', referenced from method androassist.mypack.Email_acitivity$email.doInBackground
    10-12 09:32:46.601: W/dalvikvm(1779): VFY: unable to resolve new-instance 16 (Landroassist/mypack/Mail;) in Landroassist/mypack/Email_acitivity$email;
    10-12 09:32:46.601: D/dalvikvm(1779): VFY: replacing opcode 0x22 at 0x0005
    10-12 09:32:46.601: W/dalvikvm(1779): Unable to resolve superclass of Landroassist/mypack/Mail; (186)
    10-12 09:32:46.601: W/dalvikvm(1779): Link of class 'Landroassist/mypack/Mail;' failed
    10-12 09:32:46.601: D/dalvikvm(1779): DexOpt: unable to opt direct call 0x0039 at 0x0f in Landroassist/mypack/Email_acitivity$email;.doInBackground
    10-12 09:32:46.611: W/dalvikvm(1779): threadid=10: thread exiting with uncaught exception (group=0xb4dd3908)
    10-12 09:32:46.611: E/AndroidRuntime(1779): FATAL EXCEPTION: AsyncTask #1
    10-12 09:32:46.611: E/AndroidRuntime(1779): java.lang.RuntimeException: An error occured while executing doInBackground()
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.lang.Thread.run(Thread.java:856)
     10-12 09:32:46.611: E/AndroidRuntime(1779): Caused by: java.lang.NoClassDefFoundError: androassist.mypack.Mail
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at androassist.mypack.Email_acitivity$email.doInBackground(Email_acitivity.java:267)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at androassist.mypack.Email_acitivity$email.doInBackground(Email_acitivity.java:1)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    ... 3 more

我认为这是与我的项目添加jar相关的问题。我尝试使用android 4.2.it工作相同的代码没有任何错误。我按照上面提到的相同程序将jar添加到project.But那里我已经有了我的项目的libs文件夹。当我创建项目时,它就在那里。所以我将jar添加到libs.But我不知道该怎么做。我尝试了很多解决方案,请帮助我。请不要忽略我的查询?

1 个答案:

答案 0 :(得分:0)

确保您添加广告的文件夹为libs而不是lib。您的jar文件应该只在那里,仔细检查您是否已将它们从lib文件夹中删除(实际上,删除lib文件夹)并从构建路径中删除它们。