检查 Android 中是否存在 SharedPrefecences
check if SharedPrefecences exists in Android
我想检查我是否已在我的共享首选项中保存数据并读取该文件,因为如果该文件不存在而我这样做我的应用程序将无法运行。
我搜索堆栈溢出,有人提议这样做:
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");
现在我不知道我使用它是否正确。
这是我保存偏好的地方:
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);
但是当我第一次安装我的应用程序时,因为我没有保存任何东西,我的程序 crashed.This 是 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.access0(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.access0(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)
你为什么不这样做:
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,则您知道没有保存任何数据。
有一个名为 contains
的 SharedPreferences
方法,您可以将其用于此目的:
if (getPreferences(MODE_PRIVATE).contains("text")) {
// do something
}
并且我不建议创建指向 SharedPreferences
的 File
- 您无法确定该文件将在名为“/data/data/your_application_package/shared_prefs 的目录中创建" - 有很多供应商,每个供应商都有很多设备,所以这个文件可以包含在某处 else/its 名称将是 different/etc。 contains()
就够了。
试试这个:
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
if(prefs.contains("text")) {
//data exists
} else {
//data doesn't exist
}
我想检查我是否已在我的共享首选项中保存数据并读取该文件,因为如果该文件不存在而我这样做我的应用程序将无法运行。
我搜索堆栈溢出,有人提议这样做:
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");
现在我不知道我使用它是否正确。 这是我保存偏好的地方:
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);
但是当我第一次安装我的应用程序时,因为我没有保存任何东西,我的程序 crashed.This 是 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.access0(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.access0(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)
你为什么不这样做:
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,则您知道没有保存任何数据。
有一个名为 contains
的 SharedPreferences
方法,您可以将其用于此目的:
if (getPreferences(MODE_PRIVATE).contains("text")) {
// do something
}
并且我不建议创建指向 SharedPreferences
的 File
- 您无法确定该文件将在名为“/data/data/your_application_package/shared_prefs 的目录中创建" - 有很多供应商,每个供应商都有很多设备,所以这个文件可以包含在某处 else/its 名称将是 different/etc。 contains()
就够了。
试试这个:
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
if(prefs.contains("text")) {
//data exists
} else {
//data doesn't exist
}