Я создаю почтовый клиент с 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)
на какой линии вы получаете NullPointerException? –
@niteshgoel Если я позволю ему, как в коде, который я разместил, я сначала получаю аутенацию, но когда я печатаю вручную почту и передаю, я получаю ее в First System.out.println – ivykoko
вы можете опубликовать журнал ошибок –