web-dev-qa-db-ja.com

SharedPreferencesファイルが存在するかどうかを確認する方法

Android共有設定を探していますが、設定ファイルが存在するかどうかを確認する方法があるのではないかと思います。

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

上記のコードは、「Name_of_Your_preferene」がファイルまたはユーザー設定を含むある種のコンテナーとして保存されていると私に信じさせます。

これが存在するかどうかを確認するためにそこにいるのだろうかと思います。ユーザーがアクティビティをロードするときに、すべての設定をいくつかのデフォルト値(すべての設定でオフ)でこのファイルに保存したいと思います。しかし、私は彼らが初めてそのページに行く場合にのみこれをしたいと思います。

そうでなければ、ページが読み込まれるたびにこのようなことをするなら

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”);

私はそれが彼らが設定したものでさえすべての設定を上書きするだろうと推測しています。

17
chobo2

SharedPreferencesはxmlファイルに保存されます。 /data/data/your_application_package/shared_prefs/Name_of_your_preference.xmlにあります。

SharedPreferences'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");

よろしく。

24
FinalSpirit

containsオブジェクトのSharedPreferencesメソッドを使用して、プリファレンスキーの1つがファイルに存在するかどうかを確認できます。これがfalseを返す場合は、これが初めてであると想定して、デフォルト設定を設定できます。このメソッドのドキュメントは ここ です。

設定ファイルがすでに存在するかどうかを確認する方法が見つかりませんでした(エディターを初めて取得したときに自動的に作成されます)が、この方法でうまくいくはずです。

18
Eugene S

Natur3の投稿にコメントするのに十分な担当者がいませんでした。したがって、この答え。

@ 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」サフィックスをどこから取得したのかわかりません。

ウィンドウ->ビューの表示->その他...を使用してEclipseでエミュレーターファイルシステムを参照し、「ファイルエクスプローラー」を選択することで、これを理解することができました。

5
TiredDude

「/ data/data /」パスをハードコーディングする代わりに、次のようにすることができます。

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

私はそれをこのようにしたので、その適応性のあるimo。

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

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

設定が存在するかどうかをonCreateの検証プロセスで使用し、回答に応じてボタンで設定をクリアするかどうかを有効にします。手動で名前を付けていない場合は、DDMSで設定ファイルの名前を確認するだけです。

1
natur3

私が見つけた最も簡単な方法は、Androidの組み込みコードによって共有設定が存在するかどうかを確認できます

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

プリファレンスにプリファレンスが含まれているかどうかを確認します。 (これは抽象的なブールパブリックメソッドです)

シンプルで簡単:)

0
Kerelos