2015-06-19 54 views
1

我想檢查我的共享首選項中是否保存了數據讀取文件,因爲如果該文件不存在,並且我這樣做,我的應用程序將無法工作。檢查Android中是否存在SharedPrefecences

我尋找願意做這個堆棧溢出,有人:

File f = new File(
"/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml"); 
if (f.exists()){ 
    SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
    String restoredText = prefs.getString("text", null); 
} 
else 
    Log.d("TAG", "Setup default preferences"); 

現在我不知道我正確或者不使用它。 而這正是我救我PREF:

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
editor.putString("text", showcountTv.getText().toString()); 
editor.apply(); 

編輯: 當然,我知道我可以:

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null); 

但是當我這樣做,在第一次安裝在我的應用程序,因爲我沒有保存,我的程序崩潰了。這是logcat:

06-19 09:53:25.794 20485-20485/com.pirisalavat.amirhossein.amir D/AndroidRuntime﹕ Shutting down VM 
06-19 09:53:25.795 20485-20485/com.pirisalavat.amirhossein.amir E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.pirisalavat.amirhossein.amir, PID: 20485 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pirisalavat.amirhossein.amir/com.pirisalavat.amirhossein.amir.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5257) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference 
      at com.pirisalavat.amirhossein.amir.MainActivity.getdataformsharedpref(MainActivity.java:73) 
      at com.pirisalavat.amirhossein.amir.MainActivity.onCreate(MainActivity.java:30) 
      at android.app.Activity.performCreate(Activity.java:5990) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5257) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

不需要檢查是否存在SharedPreferences。直接檢查你的「文本」。 –

+0

'prefs.getString()'的第二個參數是您的默認值。如果你得到了默認,你還沒有保存「」文本「。 –

+0

我已經檢查過它,但第一次有人安裝我的應用程序,因爲該文件不是一開始就創建的,我的應用程序關閉時出現錯誤。 –

回答

4

有一個SharedPreferences方法稱爲contains您可以使用此目的:

if (getPreferences(MODE_PRIVATE).contains("text")) { 
    // do something 
} 

而且我不建議創建一個File指向SharedPreferences - 你不能確切知道這個文件將在名爲「/ data/data/your_application_package/shared_prefs」的目錄中創建 - 有很多供應商,每個供應商都有很多設備,因此該文件可以包含在其他地方/其名稱將不同於/ etc。 就夠了。

4

爲什麼你不這樣做:

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null); 

if(restoredText == null) { 
    //you don't have any saved data 
} else { 
    //you do have saved data so do something with it here 
} 

如果restoredText爲null,那麼您知道沒有數據已保存。

0

試試這個:

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 

if(prefs.contains("text")) { 
    //data exists 
} else { 
    //data doesn't exist 
}