2017-04-07 102 views
0

我試圖調用應用getSharedPreferences ...如何在應用程序中獲得共享首選項?

public class App extends Application{ 
    public App() { 
     SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); 
    } 
} 

...但我得到了NullPointerException

java.lang.NullPointerException: Attempt to invoke virtual method 
    'android.content.SharedPreferences 
    android.content.Context.getSharedPreferences(java.lang.String, int)' 
    on a null object reference 

我也嘗試這樣做,得到了同樣的異常:

Context con = getApplicationContext(); 

我該如何撥打getSharedPreferences

+1

http://stackoverflow.com/a/10818234/3395198 –

回答

6

覆蓋onCreate(),在您的應用程序,

@Override 
public void onCreate() { 
    super.onCreate(); 

,做它。不要忘記在AndroidManifest中申報您的Application子類。例如。

<application 
     android:name="App" 
+0

完美答案。 –

-1

獲取SharedPreferences對象中onCreate()方法,而不是在構造函數

0

您正在得到一個空指針,因爲您是從構造函數調用它。此時應用程序上下文尚未創建。 嘗試從Application類的onCreate()方法調用它。

0

Application是Android類,它有自己的生命週期。你不能在那裏發起或做任何其他與SharedPreference相關的操作。因爲它需要ContextApplicationContext尚未使用其自己的生命週期進行初始化。因此,最好的做法是在onCreate方法中啓動任何操作。

另外一個建議,使你的Application類單身。

0

您不能在應用程序的構造函數中創建共享偏好對象,而不是在應用程序類的onCreate方法中創建它。下面是代碼

public class App extends Application{ 

public App() { 

} 

@Override 
public void onCreate(){ 
    SharedPreferences prefs = getApplicationContext().getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); 
} 

}

0

塊我覺得ATLEAST你可以嘗試這樣的;

public class MyApplicationclass extends Application { 

Context context; 

public MyApplicationclass() { 
} 

public MyApplicationclass(Context context) { 
    this.context = context; 
} 
} 

現在你有了上下文; 所以可以很容易地創建和使用sharedpreferences

0
public class Preferences { 
    private static Preferences preferences = null; 
    private SharedPreferences.Editor editor; 
    private String userName; 
    private String token; 
    private String password; 

    private Preferences(Context context) { 
     editor = getCurrent(context).edit(); 
    } 

    public static synchronized Preferences getInstance(Context context) { 
     if (preferences == null) { 
      preferences = new Preferences(context); 
     } 
     return preferences; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getDefaults(String key, Context context) { 
     return getCurrent(context).getString(key, null); 
    } 

    public void store(String key, String value) { 
     editor.putString(key, value); 
     editor.apply(); 
    } 

    public void remove(String key) { 
     editor.remove(key); 
     editor.apply(); 
    } 

    private SharedPreferences getCurrent(Context context) { 
     return context.getSharedPreferences("app_preference_key"), Context.MODE_PRIVATE); 
    } 

    public String getToken() { 
     return token; 
    } 

    public void setToken(String token) { 
     this.token = token; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 
} 

這是一個單獨實現的喜好。

相關問題