0

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(); 
     } 

    } 
} 
+1

décalage progressDialog = new ProgressDialog (this); inside onCreate .... aussi je suggère au lieu de 'this' mot-clé utiliser 'MainActivity.this' –

+0

@ShadowDroid il n'y a aucune raison d'utiliser la syntaxe 'MainActivity.this' en dehors des classes anonymes – maciekjanusz

+1

@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

Répondre

0

Vous devez ajouter l'activité dans votre fichier manifeste. Cela peut être un problème.

0

Il y a une erreur stupide que vous avez commise.

Au départ, vous avez déclaré

ProgressDialog progressDialog = new ProgressDialog(this); 

et encore vous avez initialisé ici

progressDialog = ProgressDialog.show(context, "", "Sending email", true); 

Alors juste enlever cela de

ProgressDialog progressDialog = new ProgressDialog(this); 

à

ProgressDialog progressDialog; 
+0

Qui a effectué une descente en portefeuille? Dites-moi simplement – Piyush

+0

J'ai réédité le code pour refléter les suggestions du forum et l'erreur persiste. J'ai vérifié le fichier manifeste et il semble intact comme prévu, car il n'y a pas d'autre activité créée que le principal. –

1

Besoin d'initialiser correctement ProgressDialog progressDialog ; Et appelez progressDialog dans votre oncreate().

En fait, votre Locat lancers francs

Causée par: java.lang.NullPointerException à android.content.ContextWrapper.getApplicationInfo (ContextWrapper.java:152) à android.view.ContextThemeWrapper.getTheme (ContextThemeWrapper.java:103) à android.app.AlertDialog.resolveDialogTheme (AlertDialog.java:143) à android.app.AlertDialog (AlertDialog.java:98) à android.app.ProgressDialog (ProgressDialog.java..: 77)

Essayez de cette façon, j'espère que ça va vous aider.

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); 
    fieldEmail = (EditText)findViewById(R.id.editEmail); 
    emailSubject = (EditText)findViewById(R.id.editSubject); 
    emailBody = (EditText)findViewById(R.id.editBody); 

    buttonLogin.setOnClickListener(this); 
} 
+2

Une petite explication pour ceci: Cela arrive parce que ProgressDialog est initialisé * avant * que la classe ne soit prête à l'instancier. Le bon endroit pour initialiser n'importe quel objet GUI est pendant (ou après) onCreate(). – HappyCactus

+0

@HappyCactus Oui oui .Merci –

+1

@HappyCactus vous avez raison, et c'est parce que jusqu'à ce que 'onCreate' soit appelé, l'objet activity n'est pas un' Context' valide. – maciekjanusz