Ce code est mis en œuvre pour envoyer un courrier électronique à partir d'un client android et il se bloque constamment. Quand j'ai vérifié le journal des erreurs, il lit: J'ai essayé de dépanner pour voir d'où vient exactement cette erreur que je n'ai pas pu voir. Veuillez aider.Lance nullPointerException et les plantages de l'application
10-02 16:15:14.536 7493-7493/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.ken4ward.emailsender, PID: 7493
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ken4ward.emailsender/com.example.ken4ward.emailsender.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5021)
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:827)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.ken4ward.emailsender.MainActivity.onCreate(MainActivity.java:46)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5021)
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:827)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
at dalvik.system.NativeStart.main(Native Method)
Ceci est le code.
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
//import android.support.v7.app.AppCompatActivity;
public class MainActivity extends Activity implements View.OnClickListener{
EditText fieldEmail, emailSubject, emailBody;
String strFieldEmail, strEmailSubject, strEmailBody;
Button buttonLogin;
Context context = null ;
Session session = null;
ProgressDialog progressDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressDialog = new ProgressDialog(MainActivity.this);
context = this;
fieldEmail = (EditText)this.findViewById(R.id.editEmail);
emailSubject = (EditText)this.findViewById(R.id.editSubject);
emailBody = (EditText)this.findViewById(R.id.editBody);
buttonLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
strFieldEmail = fieldEmail.getText().toString();
strEmailSubject = emailSubject.getText().toString();
strEmailBody = emailBody.getText().toString();
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "465");
session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]", "[email protected]");
}
});
progressDialog = ProgressDialog.show(context, "", "Sending email", true);
ReceivedFeedTask receivedFeedTask = new ReceivedFeedTask();
receivedFeedTask.execute();
}
class ReceivedFeedTask extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params) {
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(strFieldEmail));
message.setSubject(strEmailSubject);
message.setContent(strEmailBody, "text/html; charset=utf-8");
Transport.send(message);
}catch (MessagingException messagingException)
{
messagingException.printStackTrace();
}catch (Exception exception)
{
exception.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result)
{
progressDialog.dismiss();
fieldEmail.setText("");
emailSubject.setText("");
emailBody.setText("");
Toast.makeText(getApplicationContext(), "Message sent", Toast.LENGTH_LONG).show();
}
}
}
décalage progressDialog = new ProgressDialog (this); inside onCreate .... aussi je suggère au lieu de 'this' mot-clé utiliser 'MainActivity.this' –
@ShadowDroid il n'y a aucune raison d'utiliser la syntaxe 'MainActivity.this' en dehors des classes anonymes – maciekjanusz
@ShadowDroid La réponse que vous avez liée est un peu trompeur. La syntaxe 'OuterClass.this' fonctionnera partout, mais n'est ** nécessaire ** que dans les classes imbriquées, pour accéder à la référence à leurs classes externes. Encore, pas besoin d'utiliser cette syntaxe dans 'onCreate' parce que ce sera la même référence que si vous venez d'écrire' this'. PS. Dans le commentaire précédent, je voulais dire des classes ** imbriquées **, pas seulement des classes anonymes. Désolé pour cela – maciekjanusz