0

preference.xmlファイルからデフォルト値を読み込もうとしています。 sharedpreferencesを使用してそれらを読み込みますが、xmlファイルのdefaultValuesは私のために読み込まれません。ここに私のコードです。 /res/xml/prefs.xmlAndroid:sharedpreferencesを使用して環境設定XMLファイルからデフォルト値を読み込むことはできません

<?xml version="1.0" encoding="utf-8"?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="prefs" android:title="prefs"> 
     <Preference android:key="bild" android:title="bild" android:defaultValue="This is bild,0,false"/> 
     <Preference android:key="bild2" android:title="bild2" android:defaultValue="This is bild2,1,false"/> 
     <Preference android:key="bild3" android:title="bild3" android:defaultValue="This is bild3,2,false"/> 
    </PreferenceScreen> 

とAndroidのコード:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 
    PreferenceManager.setDefaultValues(this, R.xml.prefs, false); 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    String picture = prefs.getString("bild", "dosen't exist"); 
    Log.e("test", "This is the picture Value: " + picture); 
} 

"存在dosent't" それは常にプリント、それがisen'ことは、この例では意味正しく読み込まれましたか?それがなぜ起こるのか理解できません。

すべてのヘルプは感謝

/Eidor

答えて

0

this質問によると、共有設定ファイルのためのあなたの場所が間違っている、高く評価されるだろう。また、正しく覚えていれば、正しく覚えていないかもしれませんが、キーと値のペアを持つファイルを読みたい場合は、そのファイルを資産フォルダに入れてそこから読み込む方がよいでしょう。

+0

うーん、私は誤ってそれをmissunderstood have't場合。他のクエストに合わせて、彼は共有されたプレゼンテーションがどこにデバイスに保存されているのか疑問に思っています。私の場合、私は、アプリケーションの最初の起動時にデフォルトのsharedpreferencesをロードしたい。ここではわかりませんが、私が思うと思う資産のファイルを保存するのは正しいですが、メタ情報は別の方法で保存する必要があります。御時間ありがとうございます! – Eidor

0

環境設定が保存されていても、prefs.xmlには表示されません。

のstrings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="app_name">TestPreference</string> 
    <string name="action_settings">Settings</string> 

    <string name="pref_header_1">Preference Category</string> 

    <string name="pref_default_1">Image 1</string> 
    <string name="pref_default_2">Image 2</string> 

    <string name="pref_title_1">Title 1</string> 
    <string name="pref_title_2">Title 2</string> 
    <string name="pref_title_3">Title 3</string> 

    <string name="pref_key_1">pref_key_1</string> 
    <string name="pref_key_2">pref_key_2</string> 
    <string name="pref_key_3">pref_key_3</string> 

    <string-array name="pref_entries_3"> 
     <item>One</item> 
     <item>Two</item> 
     <item>Five</item> 
    </string-array> 
    <string-array name="pref_values_3"> 
     <item>1</item> 
     <item>2</item> 
     <item>3</item> 
    </string-array> 
</resources> 

preference.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <PreferenceCategory android:title="@string/pref_header_1" > 
     <Preference 
      android:defaultValue="@string/pref_default_1" 
      android:key="@string/pref_key_1" 
      android:title="@string/pref_title_1" /> 

     <EditTextPreference 
      android:defaultValue="@string/pref_default_2" 
      android:key="@string/pref_key_2" 
      android:title="@string/pref_title_2" /> 

     <ListPreference 
      android:defaultValue="1" 
      android:entries="@array/pref_entries_3" 
      android:entryValues="@array/pref_values_3" 
      android:key="@string/pref_key_3" 
      android:negativeButtonText="@null" 
      android:positiveButtonText="@null" 
      android:title="@string/pref_title_3" /> 
    </PreferenceCategory> 

</PreferenceScreen> 
:あなたのコードを再作成して、わずかにそれを変更した後、私の代わりに、プレーン <プリファレンス> -Tagを疑うようになりました

MainActivity.java

あなたが特定の好みは、ユーザーが編集可能にしたい場合は
private Logger log = LoggerFactory.getLogger(getClass()); 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Get default preferences and load default values 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

    // Check if keys exist in sharedPreferences 
    log.debug("Contains keys #1: {}; #2: {}; #3: {}", new Object[] { 
      prefs.contains(getString(R.string.pref_key_1)), 
      prefs.contains(getString(R.string.pref_key_2)), 
      prefs.contains(getString(R.string.pref_key_3)) 
    }); 

    // Get preferences values 
    String value1 = prefs.getString(getString(R.string.pref_key_1), "not found"); 
    String value2 = prefs.getString(getString(R.string.pref_key_2), "not found"); 
    String value3 = prefs.getString(getString(R.string.pref_key_3), "not found"); 
    log.debug("Values #1: {}; #2: {}; #3: {}", new Object[] { value1, value2, value3 }); 

    // prefs.edit().putString(getString(R.string.pref_key_1), getString(R.string.pref_default_1)).apply(); 
} 

ロギング結果

"Contains keys #1: false; #2: true; #3: true" 
"Values #1: not found; #2: Image 2; #3: 1" 



結論

は、おそらくコンクリートを使用した方がよいでしょうEditTextPreference、ListPreference、Checkboなどの優先度あなたのニーズに合ったxプレゼンテーション(check here for a complete list of subclasses)。

それでも、プレーン環境設定を使用したい何らかの理由で、私はあなたがこのようにそれらを手動でロードすることがあるとした場合:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     prefs.edit().putString(getString(R.string.pref_key_1), getString(R.string.pref_default_1)).apply(); 
関連する問題