Ошибка, попробовав envíar электронную почту - android.os. NetworkOnMainThreadException

в моем приложении я нуждаюсь в том, чтобы смочь посылать электронную почту. Пользователь пишет Ваше имя, электронную почту и описание в серии editText и посредством одного Button я хочу, чтобы были посланы эти данные в мою электронную почту. Я смотрел книжный магазин JavaMail и вероятно моя проблема была плохим использованием той же самой.

Здесь будь setOnClickListener Button, в котором я написал код, чтобы посылать электронную почту. Ошибка дает это мне в линии javax.mail.Transport.send(msg);

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Properties props = new Properties();

            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.put("mail.transport.protocol","smtp");
            props.put("mail.smtp.port",25);
            props.setProperty("mail.smtp.user", "ejemplo@gmail.com");
            props.setProperty("mail.smtp.auth", "true");

            Session mailSession = Session.getInstance(props,null);

            Message msg = new MimeMessage(mailSession);

            //Establecemos el asunto, el remitente y el destinatario
            try{
                msg.setSubject(etNombre.getText().toString());
                msg.setFrom(new InternetAddress(etEmail.getText().toString(),etNombre.getText().toString()));
                msg.addRecipients(Message.RecipientType.TO, new InternetAddress[] { new InternetAddress("ejemplo@gmail.com") });
            }catch (javax.mail.MessagingException ex){
                ex.getMessage();
            }
            catch (java.io.UnsupportedEncodingException e){
                e.getMessage();
            }

            //Mensaje que se quiere enviar (cuerpo del mensaje)
            DataHandler dh = new DataHandler(etMensaje.getText().toString(),"text/plain");
            try {
                msg.setDataHandler(dh);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            //Línea para envíar el mensaje
            try {
                javax.mail.Transport.send(msg);
            } catch (MessagingException e) {
                e.printStackTrace();
            }

        }
    });

Ошибка, которая дает мне, - следующая:

08-24 18:42:42.037 23504-23504/es.uclm.mylittlepets E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: es.uclm.mylittlepets, PID: 23504
                                                                  android.os.NetworkOnMainThreadException
                                                                      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
                                                                      at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
                                                                      at java.net.InetAddress.getLocalHost(InetAddress.java:409)
                                                                      at javax.mail.internet.InternetAddress.getLocalAddress(InternetAddress.java:517)
                                                                      at javax.mail.internet.UniqueValue.getUniqueMessageIDValue(UniqueValue.java:99)
                                                                      at javax.mail.internet.MimeMessage.updateMessageID(MimeMessage.java:2054)
                                                                      at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2076)
                                                                      at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2042)
                                                                      at javax.mail.Transport.send(Transport.java:117)
                                                                      at es.uclm.mylittlepets.Layout.Contacto$1.onClick(Contacto.java:78)
                                                                      at android.view.View.performClick(View.java:5198)
                                                                      at android.view.View$PerformClick.run(View.java:21147)
                                                                      at android.os.Handler.handleCallback(Handler.java:739)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

ВТОРАЯ ОШИБКА. Делая то, что говорит пользователь / потребительница Эленасис, ошибка, которую он дает: 08-25 08:53:33.061 7556-7556/es.uclm.mylittlepets E/Error: Exception: null. В try-catchбери catch и printeando ошибка.

Мой код этот:

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    try{
                        procesoEnviarMail();
                    }catch (Exception ex){
                        Log.e("Error", "Exception: " + ex.getMessage());                        }
                }
            });

        }
    });

Метод procesoEnviarMail() просто у него есть весь код, написанный ранее в месте, в котором сейчас находят этот try-catch.

Новая ошибка в: javax.mail.Transport.send(msg);

08-25 11:58:13.676 7782-7782/es.uclm.mylittlepets E/AndroidRuntime: FATAL EXCEPTION: main
                                                                Process: es.uclm.mylittlepets, PID: 7782
                                                                android.os.NetworkOnMainThreadException
                                                                    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
                                                                    at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
                                                                    at java.net.InetAddress.getLocalHost(InetAddress.java:409)
                                                                    at javax.mail.internet.InternetAddress.getLocalHostName(InternetAddress.java:568)
                                                                    at javax.mail.internet.InternetAddress._getLocalAddress(InternetAddress.java:547)
                                                                    at javax.mail.internet.InternetAddress.getLocalAddress(InternetAddress.java:518)
                                                                    at javax.mail.internet.UniqueValue.getUniqueMessageIDValue(UniqueValue.java:100)
                                                                    at javax.mail.internet.MimeMessage.updateMessageID(MimeMessage.java:2172)
                                                                    at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2200)
                                                                    at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2159)
                                                                    at javax.mail.Transport.send(Transport.java:123)
                                                                    at es.uclm.mylittlepets.Layout.Contacto.procesoEnviarMail(Contacto.java:110)
                                                                    at es.uclm.mylittlepets.Layout.Contacto$1$1.run(Contacto.java:49)
                                                                    at android.app.Activity.runOnUiThread(Activity.java:5511)
                                                                    at es.uclm.mylittlepets.Layout.Contacto$1.onClick(Contacto.java:42)
                                                                    at android.view.View.performClick(View.java:5198)
                                                                    at android.view.View$PerformClick.run(View.java:21147)
                                                                    at android.os.Handler.handleCallback(Handler.java:739)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                    at android.os.Looper.loop(Looper.java:148)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
3
задан 25.08.2016, 15:00
2 ответа

Проблема состоит в том, что ты реализуешь это задание в главной нити, можешь использовать runOnUIThread, чтобы выполнять ты mГ©todo.

NetworkOnMainThreadException : он вызывается, когда ты стараешься реализовывать операции в главной нити (Main thread), что неправильный.

Использует runOnUiThread ()

 @Override
        public void onClick(View view) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {  
                   procesoEnviaEmail(); //Realizar aquí tu proceso!                    

                } catch (Exception e) {
                    Log.e("Error", "Exception: " + e.getMessage());
                }
            }
        });
}

Других выборов он состоял бы в том, чтобы использовать Asyncask или Handler.post ()

1
ответ дан 24.11.2019, 13:34
  • 1
    Я обновил informaci и # 243; n с новой ошибкой, которая отпускает меня, осуществив этот c и # 243; я говорю –  Iván García 25.08.2016, 12:00
  • 2
    Ok Иван, - другая ошибка, сними try - catch и скажи мне, что ты получаешь ошибку? –  Jorgesys♦ 25.08.2016, 14:37
  • 3
    Уже est и # 225; обновленный с ошибкой, это тот же самый раньше. –  Iván García 25.08.2016, 15:01

Ты можешь делать следующее, используя Intent, и seteas стоимость, что ты хотел, чтобы был e-mail (obtenes edittext)> у

String recepientEmail = "etEmail.getText().toString()"; // aca va donde quieres enviar el email  
Intent intentt = new Intent(Intent.ACTION_SENDTO); // esto lo dejas como esta
intentt.setData(Uri.parse("mailto:" + recepientEmail)); // aca seteas a que direccion va el email con la variable recipientEmail)
intentt.putExtra(Intent.EXTRA_SUBJECT, "Sugerencia");// este es el asunto de email
intentt.putExtra(Intent.EXTRA_TEXT, "Escribe tu sugerencia aqui"); // este es el contenido del email
startActivity(intentt);

, единственное, что ты должен делать, он состоит в том, чтобы получать текст каждого edittext и setearlos в коде. intent ты это помещаешь внутри действия Onclick твоей пуговицы посылать.

Тогда ты был бы должен меняться, где он говорит "Подсказку" и "Он пишет твой e-mail здесь" из-за текста твоих edittext. Например:

intentt.putExtra(Intent.EXTRA_SUBJECT, "TU_EDITTEXT.gettext().toString()"); // asunto del email

intentt.putExtra(Intent.EXTRA_TEXT, "TU_EDITTEXT.gettext().toString()"); // cuerpo del email

Надеялся, что он подает тебя. Привет!

0
ответ дан 24.11.2019, 13:34