android 如何检查SharedPreferences文件是否存在

eblbsuwk  于 2022-12-16  发布在  Android
关注(0)|答案(8)|浏览(238)

我正在寻找一个Android共享首选项,我想知道有没有一种方法可以只检查首选项文件是否存在。

SharedPreferences  mySharedPreferences ; 
mySharedPreferences=getSharedPreferences(“Name_of_your_preference”,mode);

字符串
上面的代码使我相信“Name_of_Your_preferee”是作为一个文件或某种容器存储的,其中包含您的首选项。
我想知道有没有办法检查这个是否存在。当一个用户加载一个活动时,我想用一些默认值(关闭所有设置)将所有设置保存到这个文件中。但是,我只想在他们第一次访问这个页面时这样做。
否则如果我每次加载页面时都这样做

SharedPreferences.Editor editor= mySharedPreferences.edit();

/* now store your primitive type values. In this case it is true, 1f and Hello! World  */

editor.putBolean(“myBoolean”,true);

editor.putFloat(“myFloat”,1f);

editor.putString(“myString”,” Hello! World”);

我猜它会覆盖所有的设置,甚至是他们设置的。

w1jd8yoj

w1jd8yoj1#

共享首选项保存在xml文件中。您可以在/data/data/您的应用程序包/共享首选项/您的首选项名称. xml中找到该文件
要检查共享首选项“Name_of_your_preference”是否存在:

File f = new File(
"/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml");
if (f.exists())
    Log.d("TAG", "SharedPreferences Name_of_your_preference : exist");
else
    Log.d("TAG", "Setup default preferences");

问候。

3ks5zfa0

3ks5zfa02#

您可以在SharedPreferences对象上使用contains方法来检查文件中是否存在某个首选项键。如果返回false,则可以假定这是第一次,并填充默认设置。此方法的文档在此处。
我找不到任何方法来检查首选项文件是否已经存在(它将在您第一次检索编辑器时自动创建),但这个方法应该可以。

wwwo4jvm

wwwo4jvm3#

我没有足够的代表来评论natur 3的帖子。因此这个答案。
@natur3:非常有帮助,谢谢。但是我有一个小问题......文件后缀。如果我这样定义我的文件名:

private static final String FILENAME = "myPrefs";

然后用途:

File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + FILENAME);

f.exists()将返回false,即使文件系统上存在该文件。这是因为Android在编写SharedPreferences时会自动添加后缀“.xml”,所以我不得不让我的文件引用看起来像这样:

File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + FILENAME + ".xml");

我不知道你的“_preferences.xml”后缀是从哪里来的。
我设法通过使用Window-〉Show View-〉Other...浏览Eclipse中的模拟器文件系统,然后选择“文件资源管理器”来解决这个问题。

bprjcwpo

bprjcwpo4#

除了硬编码“/data/data/”路径之外,您还可以执行以下操作:

public boolean preferenceFileExist(String fileName) {
    File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/"
            + fileName + ".xml");
    return f.exists()
}
p5cysglq

p5cysglq5#

我这样做,使其适应海事组织。

File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + getPackageName()+ "_preferences.xml");

if(f.exists())
{ 
     //do stuff`enter code here`
}

我在onCreate的一个验证过程中使用了这个方法,如果首选项存在或不存在,并根据答案启用一个按钮来清除首选项或不清除-如果没有手动命名,只需验证DDMS中首选项文件的名称。

whitzsjs

whitzsjs6#

最简单的方法,我发现,我们可以检查是否存在共享的首选项由Android上的内置代码

sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!}

检查首选项是否包含首选项。(它是抽象布尔公共方法)
简单易行:)

13z8s7eq

13z8s7eq7#

这似乎是一个更准确的解决方案

val file = File(filesDir.parent, "shared_prefs/name_of_preference.xml")

或者只是

val file = File(filesDir, "../shared_prefs/name_of_preference.xml")
pkln4tw6

pkln4tw68#

我对解决方案的看法:

/**
 * Returns the shared preferences directory.
 */
val Context.sharedPrefsDir get() = File(filesDir.parentFile, "shared_prefs")

/**
 * Check if the SharedPreferences file exists in the shared preferences directory
 */
fun Context.settingsFileExists(file: String) = File(sharedPrefsDir, "$file.xml").exists()

/**
 * Opens the shared preferences as by getSharedPreferences if it exists,
 * but does NOT create the file if it does not yet exist.
 */
fun Context.getSharedPreferencesOrNull(file: String, mode: Int = Context.MODE_PRIVATE) =
        if(settingsFileExists(file))
            getSharedPreferences(file, mode)
        else
            null

这让我可以说

val myPrefs = Context.getSharedPreferencesOrNull("alternativeConfigFile") ?: Context.getSharedPreferences("mainConfigFile")

而无需Android在幕后创建“alternativeConfigFile.xml”。

相关问题