2017-02-14 20 views
0

Хорошо, чтобы сделать длинную историю короче, у меня есть фрагмент диалога, в котором пользователи подписываются для приложения. Они вводят свой адрес электронной почты и пароль, и предполагается, что они отправят им по электронной почте приветствие в приложение. По какой-то причине, я получаю эту ошибкуОшибка в API студии Javamail API

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.sr116.art_buzz, PID: 5284 
        java.lang.NoClassDefFoundError: javax.activation.DataHandler 
         at javax.mail.internet.MimeMessage.setContent(MimeMessage.java:1516) 
         at javax.mail.internet.MimeBodyPart.setText(MimeBodyPart.java:1183) 
         at javax.mail.internet.MimeMessage.setText(MimeMessage.java:1555) 
         at javax.mail.internet.MimeMessage.setText(MimeMessage.java:1539) 
         at com.sr116.art_buzz.SignUpDialog$2.onClick(SignUpDialog.java:68) 
         at android.view.View.performClick(View.java:4633) 
         at android.view.View$PerformClick.run(View.java:19330) 
         at android.os.Handler.handleCallback(Handler.java:733) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:157) 
         at android.app.ActivityThread.main(ActivityThread.java:5356) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:515) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 

        at dalvik.system.NativeStart.main(Native Method) 

Вот мой код:

public class SignUpDialog extends DialogFragment 
{ 
    private static final String TAG = "com.sr116.art_buzz"; 
    //from and to 
    final String userName = "[email protected]"; 
    final String password = "password"; 




    //Recipients email 
    private EditText signUpEmail; 
    //Users Password 
    private EditText signUpPassword; 

    //signUpButton 
    Button signUpButton; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     //In fragments must use view to access ids 
     View view = inflater.inflate(R.layout.sign_up_dialog, null); 
     signUpEmail = (EditText) view.findViewById(R.id.signUpEmail); 
     signUpPassword =(EditText) view.findViewById(R.id.signUpPassword); 
     signUpButton = (Button) view.findViewById(R.id.signUpButton); 

     Properties props = new Properties(); 
     props.put("mail.smtp.starttls.enable","true"); 
     props.put("mail.smtp.auth","true"); 
     props.put("mail.smtp.host","smtp.gmail.com"); 
     props.put("mail.smtp.port","587"); 

     final Session session= Session.getInstance(props, 
       new javax.mail.Authenticator(){ 
        protected PasswordAuthentication getPasswordAuthentication(){ 
         return new PasswordAuthentication(userName,password); 
        } 
       }); 

     signUpButton.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 
       try{ 
        Message message = new MimeMessage(session); 
        message.setFrom(new InternetAddress("[email protected]")); 
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(signUpEmail.getText().toString())); 
        message.setSubject("Testing"); 
        message.setText("Still testing!!!"); 
        Transport.send(message); 
       }catch (Exception e) 
       { 
        throw new RuntimeException(e); 
       } 
      } 
     }); 
     return view; 
    } 


} 

Gradle:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.sr116.art_buzz" 
     minSdkVersion 19 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 
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 'javax.mail:mail:1.5.0-b01' 
    compile 'javax.activation:activation:1.1.1' 
} 
dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.1.0' 
    testCompile 'junit:junit:4.12' 
    compile files('libs/javax.mail.jar') 
    compile files('libs/activation-1.1.1.jar') 
} 

ответ

1

Нет, игнорируйте другой ответ. Используйте официальный номер JavaMail for Android.

+0

Когда я делаю то, что они говорят, я получаю эту ошибку Ошибка: выполнение выполнено для задачи ': app: compileDebugJavaWithJavac'. > java.io.FileNotFoundException: C: \ Users \ SR116 \ AndroidStudioProjects \ Art_Buzz \ app \ libs \ activation-1.1.1.jar (система не может найти указанный файл) – user2626734

+0

Что находится в файле сборки градиента? Не должно быть ссылки на активацию-1.1.1.jar. –

+0

Я обновил сообщение с моим файлом сборки gradle – user2626734

0

Есть три библиотеки, которые вы должны включить в вашем приложении: почта .jar, activation.jar и addnal.jar. Похоже, что у вас отсутствует то, от чего зависит библиотека активации, и это может быть связано с тем, что вы не используете порт Android этой библиотеки.