2017-11-23 11 views
1

JavaMail APIを使用して電子メールを送るアプリケーションを開発しています。アプリケーション全体が正常に動作していますが、電子メールを送信するためにボタンをクリックすると、アプリケーションがクラッシュします。私はSendMailコードのコンテキストを変更しようとしましたが、私の問題は解決しませんでした。私はあなたが何かを必要とするなら、私はJavaコードを取得しているデバッグエラーを投稿しているだけで私に尋ねる。どんな助けも本当に歓迎です。Send Sendのアプリケーションがクラッシュする

SendMail.Java

public class SendMail extends AsyncTask<Void,Void,Void> { 

    //Declaring Variables 

    private Context context; 
    private Session session; 

    //Information to send email 
    private String email; 
    private String subject; 
    private String message; 

    //Progressdialog to show while sending email 
    private ProgressDialog progressDialog; 

    //Class Constructor 
    public SendMail(OneFragment oneFragment, String email, String subject, String message) { 
     //Initializing variables 
     this.context = context; 
     this.email = email; 
     this.subject = subject; 
     this.message = message; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     //Showing progress dialog while sending email 
     progressDialog = ProgressDialog.show(context,"Enviando mensagem","Aguarde um momento...",false,false); 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     //Dismissing the progress dialog 
     progressDialog.dismiss(); 
     //Showing a success message 
     Toast.makeText(context,"Mensagem enviada",Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     //Creating properties 
     Properties props = new Properties(); 

     //Configuring properties for gmail 
     //If you are not using gmail you may need to change the values 
     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"); 

     //Creating a new session 
     session = Session.getDefaultInstance(props, 
       new javax.mail.Authenticator() { 
        //Authenticating the password 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(Config.EMAIL,Config.PASSWORD); 
        } 
       }); 

     try { 
      //Creating MimeMessage object 
      MimeMessage mm = new MimeMessage(session); 

      //Setting sender address 
      mm.setFrom(new InternetAddress(Config.EMAIL)); 
      //Adding receiver 
      mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email)); 
      //Adding subject 
      mm.setSubject(subject); 
      //Adding message 
      mm.setText(message); 

      //Sending email 
      Transport.send(mm); 

     } catch (MessagingException e) { 
      e.printStackTrace(); 
     } 
     return null; 

    } 
} 

エラーデバッグ

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: info.androidhive.materialtabs, PID: 6870 
        java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference 
         at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:154) 
         at android.app.AlertDialog.<init>(AlertDialog.java:109) 
         at android.app.ProgressDialog.<init>(ProgressDialog.java:77) 
         at android.app.ProgressDialog.show(ProgressDialog.java:110) 
         at android.app.ProgressDialog.show(ProgressDialog.java:104) 
         at info.androidhive.materialtabs.SendMail.onPreExecute(SendMail.java:50) 
         at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587) 
         at android.os.AsyncTask.execute(AsyncTask.java:535) 
         at info.androidhive.materialtabs.fragments.OneFragment.sendEmail(OneFragment.java:45) 
         at info.androidhive.materialtabs.fragments.OneFragment.onClick(OneFragment.java:50) 
         at android.view.View.performClick(View.java:5156) 
         at android.view.View$PerformClick.run(View.java:20755) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:145) 
         at android.app.ActivityThread.main(ActivityThread.java:5832) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

OneFragment

//More Code 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);} 


    private void sendEmail() { 
     //Getting content for email 
     String email = "myemail"; 
     String subject = "subject"; 
     String message = editTextMessage.getText().toString().trim(); 

     //Creating SendMail object 
     SendMail sm = new SendMail(this, email, subject, message); 

     //Executing sendmail to send email 
     sm.execute(); 
    } 

    @Override 
    public void onClick(View v) { 
     sendEmail(); 
    } 

//More Code 
+0

あなたはdiegoveloper ansを試しましたかワー? –

+0

はい、これは完了です。ありがとうございました。 –

答えて

1

のコンストラクタをチェックあなたのSendmailタスク

//Class Constructor 
    public SendMail(OneFragment oneFragment, String email, String subject, String message) { 
     //Initializing variables 
     this.context = context; 
     this.email = email; 
     this.subject = subject; 
     this.message = message; 
    } 

contextがnullであるので、あなたはcontext値を受信して​​いない:)

その後、あなたはここに問題を抱えている:

progressDialog = ProgressDialog.show(context,"Enviando mensagem","Aguarde um momento...",false,false); 

UPDATE:あなたのコード

を修正
//Class Constructor 
    public SendMail(OneFragment oneFragment, String email, String subject, String message) { 
     //Initializing variables 
     this.context = oneFragment.getActivity(); 
     this.email = email; 
     this.subject = subject; 
     this.message = message; 
    } 
+0

ああ、私は今それを見る...この場合、どうすればコンテキスト値を設定できますか? –

+0

完了、私の回答を更新しました – diegoveloper

+0

それはありがとうございます!私はコードを学んでいるので、あなたの時間と注意のおかげで、いくつかの困難を抱えています。 –