2013-12-15 6 views
0

Я создаю почтовый клиент с javamail. Я установил учетную запись, в которой хранятся почта и пароль. У меня есть код, который отправляет почту в классе Data.java. Проблема в том, что я не могу получить SharedPreferences, потому что это не Activity, и он не расширяет PreferenceActivity. Мне нужно было использовать Looper.prepare(), потому что иначе оно забросило еще одно исключение. Я пытаюсь получить Shared Prefs из MainActivity, но я получаю исключение NullPointerException, когда я пытаюсь его распечатать. Мой MainActivity код:NullPointerExeption при получении строки из другой активности

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     SharedPreferences prefs = getSharedPreferences("loginPrefs", Context.MODE_PRIVATE); 
     mail1 = prefs.getString("email", null); 
     pass = prefs.getString("pass", null); 

     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()) 
        .commit(); 
     } 
    } 

    public String getMail1(){ 
     return mail1; 
    } 
    public String getPass(){ 
     return pass; 
    } 

Data.java код:

public class Data{ 

    String a; 
    String b; 

    private void getEverything(){ 
     Looper.prepare(); 
     MainActivity d = new MainActivity(); 
     a = d.getMail1(); 
     b = d.getPass(); 
    } 


    public void sendMail(){ 
     getEverything(); 
     Properties props = new Properties(); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.port", "587"); 

     Session session = Session.getInstance(props, 
       new javax.mail.Authenticator() { 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(a, b); 
        } 
       }); 

     try { 

      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(a)); 
      message.setRecipients(Message.RecipientType.TO, 
        InternetAddress.parse(gmail.to)); 
      message.setSubject(gmail.subject); 
      message.setText(gmail.text); 

      Transport.send(message); 
      System.out.println(a); 
      System.out.println(b); 
      System.out.println("Done"); 

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

LogCat:

java.lang.RuntimeException: An error occured while executing doInBackground() 
      at android.os.AsyncTask$3.done(AsyncTask.java:299) 
      at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
      at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
      at java.lang.Thread.run(Thread.java:856) 
    Caused by: java.lang.NullPointerException 
      at com.android.internal.os.LoggingPrintStream.println(LoggingPrintStream.java:298) 
      at com.test.email.Data.sendMail(Data.java:61) 
      at com.test.email.gmail.doInBackground(gmail.java:40) 
      at com.test.email.gmail.doInBackground(gmail.java:19) 
      at android.os.AsyncTask$2.call(AsyncTask.java:287) 
      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
            at java.lang.Thread.run(Thread.java:856) 
+0

на какой линии вы получаете NullPointerException? –

+0

@niteshgoel Если я позволю ему, как в коде, который я разместил, я сначала получаю аутенацию, но когда я печатаю вручную почту и передаю, я получаю ее в First System.out.println – ivykoko

+0

вы можете опубликовать журнал ошибок –

ответ

1
System.out.println(a); 
System.out.println(b); 

a и b являются null. Вот почему NPE.

Причина они null:

MainActivity d = new MainActivity(); 

Никогда инстанцирует деятельность с new. (Используйте Intent вместо этого. Но вам не нужно создавать экземпляр деятельности здесь.)

Такого объект деятельности вы получаете здесь не тот же вид деятельности вы установите значения переменных в.

Вместо пас любые значения, которые вы должны в Data классе в качестве параметров метода, как

public void sendMail(String email, String password) { ... 
+0

как бы это было? – ivykoko

+0

решено !! благодаря! – ivykoko

Смежные вопросы