![](/img/trans.png)
[英]Getting string from SharedPreferences in AsyncTask, java.lang.NullPointerException
[英]Get string from SharedPreferences in AsyncTask
我正在嘗試開發用於發送電子郵件的應用程序,實際上我剛剛開始學習Java。
我在共享首選項中創建了字符串“ email_address”和“ pass”,以便用戶可以更改它們。 然后我嘗試使用該數據發送電子郵件->
//Creating a new session
session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
//Authenticating the password
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(sharedPrefs.getString("email_address", "a"), sharedPrefs.getString("pass", "a")); }
});
try { <...>
然后我得到了:
原因:java.lang.NullPointerException:嘗試在空對象引用上調用接口方法'java.lang.String android.content.SharedPreferences.getString(java.lang.String,java.lang.String)'
Android Studio指出了這一點->
return new PasswordAuthentication(sharedPrefs.getString("email_address", "a"), sharedPrefs.getString("pass", "a")); }
如果我在該行中對我的gmail和密碼進行了硬編碼,則可以很好地工作,但是我需要一個選項來更改它們(以防用戶無法從我的源代碼構建此應用)。 請幫助,我已經花了3個小時來瀏覽此網站和androiddevelopers。 :(
確實不建議在您的sharedPreferences
保留任何形式的密碼,如果您正在創建一個應用程序,希望用戶選擇他們想要從其中發送密碼的位置,例如使用自己的個人Gmail,請使用Intents
代替。如果確定要自動發送電子郵件,建議您設置一個Gmail SMTP
電子郵件地址以從中發送,並將用戶名和密碼通過該地址傳遞給您的Authenticator。 (Java郵件API)
電子郵件意圖示例: 發送電子郵件意圖
但是如果您想自動發送電子郵件:使用Java Mail API發送電子郵件的示例
從您有問題的評論中詢問:
首先,由於該方法內部的變量是LOCAL,因此無濟於事:
@Override
protected void onPreExecute() {
super.onPreExecute();
//get sharedPreferences here
SharedPreferences sharedPreferences = getSharedPreferences(PreferenceManager.getDefaultSharedPreferences(this);
}
然后,一種解決方案是,使用構造函數初始化AsyncTask時初始化SharedPreferences:
public SendMail(Context context, String email, String subject, String sharedText1) {
//Initializing variables
Context context1 = context; // this line is doing nothing..
this.email = email;
this.subject = subject;
this.sharedText1 = sharedText1;
sharedPrefs = context.getSharedPreferences("MySharedPreferences", Context.MODE_PRIVATE); // add this line to initialize variable
}
最后,您可以訪問sharedPrefs變量而不會出現空指針異常:
sharedPrefs.getString("email_address", "a")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.