0

GMail を介して単純なメール送信者をテストしています。コードは機能し、ローダーを表示したり、他のことを実行できるように、AsyncTask 内に配置しようとしています。

これは作業コードです

package com.example.mailsend;

import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;

public class MailSendMainActivity extends Activity {

String username = "USER";
String password = "PASS";

public void send(View view){
     Properties props = new Properties();
      props.put("mail.smtp.host", "smtp.gmail.com");
      props.put("mail.smtp.socketFactory.port", "465");
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      props.put("mail.smtp.auth", "true");
      props.put("mail.smtp.port", "465");

      Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, password);
      }
      });
      try {

          Message message = new MimeMessage(session);
          message.setFrom(new InternetAddress("Address"));
          message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@hotmail.com"));
          message.setSubject("Subject");
          message.setContent("content", "text/html; charset=utf-8");
          Transport.send(message);

            } catch (MessagingException e) {
                  throw new RuntimeException(e);
                  }

}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mail_send_main);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.mail_send_main, menu);
    return true;
}



}

ここで、自分が何をしているのか正確に理解できなくなったときです。私は周りを読んでみましたが、私はそれを手に入れることができないので、これが私の最善の試みです(しかしうまくいきません)

package com.example.mailsend;

import java.io.UnsupportedEncodingException;
import java.util.Properties;


import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MailSendMainActivity extends Activity {

String username = "USER";
String password = "PASS";
Toast toast_pre;
Toast toast_post;

private Session createSessionObject(){
    Properties props = new Properties();
      props.put("mail.smtp.host", "smtp.gmail.com");
      props.put("mail.smtp.socketFactory.port", "465");
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      props.put("mail.smtp.auth", "true");
      props.put("mail.smtp.port", "465");

      return Session.getInstance(props, new javax.mail.Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, password);
      }
      });
   }

private Message createMessage(String email, String subject, String messageBody, Session session) throws MessagingException, UnsupportedEncodingException {
    try {
    Message message = new MimeMessage(session);
      message.setFrom(new InternetAddress("Address"));
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@hotmail.com"));
      message.setSubject("Subject");
      message.setContent("content", "text/html; charset=utf-8");
      return message;
    } catch (MessagingException e) {
      throw new RuntimeException(e);
      }

}
private class SendMailTask extends AsyncTask<Message, Void, Void> {
    private ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(MailSendMainActivity.this, "Please wait", "Sending mail", true, false);
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();
    }

    @Override
    protected Void doInBackground(Message... messages) {
        try {
            Transport.send(messages[0]);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return null;
    }
}
public void send(View view){
    new SendMailTask().execute();

}
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mail_send_main);
    //if (android.os.Build.VERSION.SDK_INT > 9) {
    //    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    //    StrictMode.setThreadPolicy(policy);
    //  }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.mail_send_main, menu);
    return true;
}



}

これが LogCat です

09-21 14:05:37.408: E/AndroidRuntime(26861): FATAL EXCEPTION: AsyncTask #1
09-21 14:05:37.408: E/AndroidRuntime(26861): java.lang.RuntimeException: An error occured while executing doInBackground()
09-21 14:05:37.408: E/AndroidRuntime(26861):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at java.lang.Thread.run(Thread.java:841)
09-21 14:05:37.408: E/AndroidRuntime(26861): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
09-21 14:05:37.408: E/AndroidRuntime(26861):    at com.example.mailsend.MailSendMainActivity$SendMailTask.doInBackground(MailSendMainActivity.java:79)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at com.example.mailsend.MailSendMainActivity$SendMailTask.doInBackground(MailSendMainActivity.java:1)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-21 14:05:37.408: E/AndroidRuntime(26861):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
09-21 14:05:37.408: E/AndroidRuntime(26861):    ... 4 more
09-21 14:05:38.009: E/WindowManager(26861): Activity com.example.mailsend.MailSendMainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41e7efa8 V.E..... R......D 0,0-729,324} that was originally added here
09-21 14:05:38.009: E/WindowManager(26861): android.view.WindowLeaked: Activity com.example.mailsend.MailSendMainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41e7efa8 V.E..... R......D 0,0-729,324} that was originally added here
09-21 14:05:38.009: E/WindowManager(26861):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:345)
09-21 14:05:38.009: E/WindowManager(26861):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:239)
09-21 14:05:38.009: E/WindowManager(26861):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
09-21 14:05:38.009: E/WindowManager(26861):     at android.app.Dialog.show(Dialog.java:281)
09-21 14:05:38.009: E/WindowManager(26861):     at android.app.ProgressDialog.show(ProgressDialog.java:116)
09-21 14:05:38.009: E/WindowManager(26861):     at android.app.ProgressDialog.show(ProgressDialog.java:104)
09-21 14:05:38.009: E/WindowManager(26861):     at com.example.mailsend.MailSendMainActivity$SendMailTask.onPreExecute(MailSendMainActivity.java:67)
09-21 14:05:38.009: E/WindowManager(26861):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
09-21 14:05:38.009: E/WindowManager(26861):     at android.os.AsyncTask.execute(AsyncTask.java:534)
09-21 14:05:38.009: E/WindowManager(26861):     at com.example.mailsend.MailSendMainActivity.send(MailSendMainActivity.java:87)
09-21 14:05:38.009: E/WindowManager(26861):     at java.lang.reflect.Method.invokeNative(Native Method)
09-21 14:05:38.009: E/WindowManager(26861):     at java.lang.reflect.Method.invoke(Method.java:525)
09-21 14:05:38.009: E/WindowManager(26861):     at android.view.View$1.onClick(View.java:3628)
09-21 14:05:38.009: E/WindowManager(26861):     at android.view.View.performClick(View.java:4240)
09-21 14:05:38.009: E/WindowManager(26861):     at android.view.View$PerformClick.run(View.java:17721)
09-21 14:05:38.009: E/WindowManager(26861):     at android.os.Handler.handleCallback(Handler.java:730)
09-21 14:05:38.009: E/WindowManager(26861):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-21 14:05:38.009: E/WindowManager(26861):     at android.os.Looper.loop(Looper.java:137)
09-21 14:05:38.009: E/WindowManager(26861):     at android.app.ActivityThread.main(ActivityThread.java:5103)
09-21 14:05:38.009: E/WindowManager(26861):     at java.lang.reflect.Method.invokeNative(Native Method)
09-21 14:05:38.009: E/WindowManager(26861):     at java.lang.reflect.Method.invoke(Method.java:525)
09-21 14:05:38.009: E/WindowManager(26861):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-21 14:05:38.009: E/WindowManager(26861):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-21 14:05:38.009: E/WindowManager(26861):     at dalvik.system.NativeStart.main(Native Method)

誰でも私を助けることができますか?どうもありがとうございました

4

2 に答える 2

1

SendMailTask​​().execute(); で Message 変数を渡さないでください。Transport.send(messages[0]); でmessages[0]を使用します。だからあなたはエラーを得ました

于 2013-09-21T08:28:16.513 に答える
0

あなたのコードを見ると、2 つの問題と 1 つの理解できない問題があるようです。

  1. 渡されたメッセージがないため、IndexOutOfBound列に並びます。Transport.send(messages[0]);メッセージは から送信される必要がありますnew SendMailTask().execute();。ここでは、1 つ以上のメッセージを渡す必要があります。このdoInBackgroundようにループする必要がありますfor(Message message : messages) Transport.send(message);

  2. 最初の問題が解決されると、WindowLeaked例外が発生します。そうでない場合は、追加の質問としてそれを尋ねることをお勧めします(その後、メール送信自体が機能する場合)

  3. 私はあなたのコードを見send()て、次に呼び出すメソッドをどこで呼び出すのか理解できませんnew SendMailTask().execute();。私は何を監督しますか?短いコメントでも構いません。

于 2013-09-21T08:35:42.070 に答える