2

わかりました、Udacity Android Development Course に従って、pref_general.xml という名前の sharedPreferences ファイルに保存された郵便番号にアクセスすることが期待される部分に到達しました。このファイルには、郵便番号が文字列型で保存され、location というキーに接続されています。キーと値のペア。

この問題に対する私のアプローチは、getSharedPreferences() メソッドを使用してファイルを名前で取得することでした。ファイルが null ではないため、問題は発生していないように見えますが、郵便番号を取得しようとすると、キーを介して値が見つからず、引数の指定されたデフォルト値に落ち着きました。

SharedPreferences appPreferences = getActivity().getSharedPreferences("pref_general", Context.MODE_PRIVATE);
        if(appPreferences == null) {
            Log.v("ERRORTAG", "Cannot get sharedPreferences file");
        }
        String getPostal = appPreferences.getString(getString(R.string.pref_location_key), "0");
        Log.v("ERRORTAG", getPostal);

logcat の 2 番目の冗長ステートメントは、94043 郵便番号の特定のキーに関連付けられた値ではなく、デフォルトの文字列値 0 になります。

Udacity が提供した答えは、PreferenceManager を使用することでした。これは、Activity に関連付けられたデフォルトの単独の sharedPreferences ファイルを取得します。

SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());

ファイルが null ではなく、取得された郵便番号が、sharedPreference ファイル内でキーと値のペアとして設定された既定の郵便番号 94043 である。

私のアプローチがうまくいかなかった理由を理解したいです。それはかなり近かった。唯一の違いは、ファイルへのアクセス方法でした。理由の説明をお願いします。ありがとうございました。

4

1 に答える 1

2

言うためのドキュメントPreferenceActivity

古いモードで PreferenceActivity を使用している場合、[PreferenceFragment の] ドキュメントは非推奨の API に適用されます。

PreferenceFragmentのドキュメントでは、何が起こっているかを説明しています。

このフラグメントの設定階層が使用する SharedPreferences のインスタンスを取得するには、このフラグメントと同じパッケージのコンテキストで getDefaultSharedPreferences(android.content.Context) を呼び出します。

これは、 が元のファイルと同じ名前PreferenceActivity#addPreferencesFromResource(...)のファイルを作成しないことを示唆しています。SharedPreferences代わりに、ファイルをデフォルトの共有設定にマージします。pref_generalファイルは存在しません。基本的に、ファイルから読み取ろうとするとファイルが作成されます。(ただし、編集するまで実際にはディスク上に作成されません。)

于 2015-10-07T08:24:30.477 に答える