SharedPreferences
Androidの に大きな問題があります。アプリケーションを閉じると、環境設定により、文字列値の 1 つに不要な文字が追加されます。実際には、構成可能なエスケープ シーケンスです。
私は簡単なセットアップを持っていますMainActivity
。
@Override
protected void onStart() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
sequence = prefs.getString("escape_sequence", "");
}
そして、値が設定される環境設定画面。アプリを開いてプリファレンス画面に移動し、値を正しく設定してブレークポイント\n\n
に戻りMainActivity
、シーケンスが として正しく表示されJava.lang.String, value(char[2])= "\n\n", count=2
ます。Androidスタジオを介してアプリを再起動すると、コード内の同じブレークポイントが突然表示されます: Java.lang.String, value(char[6])= "\n\n ", count=6
、4つのスペースと10のエスケープ\u0000
文字が含まれています。
なぜこれが起こっているのか、それについて私にできることはありますか?
ところで、これまでのところ、アプリのどこでも SharedPreferences.Editor に触れていません。私はPreferencesScreenを介して厳密に行われます。したがって、アプリ内のどこでも上書きは行われません。デフォルト値も適用されるべきではありませんが、設定はandroid:defaultValue="\n\n"
とにかく適用されます。
編集:
私は理由を見つけました:改行が設定の最後にある場合、アンドロイドはスペースを追加します。理由がわかりません。
編集:
カスタム設定コードは次のとおりです。
public class SequencePreference extends DialogPreference {
EditText sequenceInput;
public SequencePreference(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.dialog_preference_sequence);
setPositiveButtonText(R.string.settings_sequence_ok);
setNegativeButtonText(R.string.settings_sequence_cancel);
setDialogIcon(null);
}
@Override
protected View onCreateDialogView() {
View view = super.onCreateDialogView();
sequenceInput= (EditText)view.findViewById(R.id.sequence_input);
return view;
}
@Override
protected void onDialogClosed(boolean positiveResult) {
// When the user selects "OK", persist the new value
if (positiveResult) {
String sequenceValue = new String( sequenceInput.getText().toString() );
String[] parts = sequenceValue.split("-");
if(parts.length == 2) {
persistString(parts[1]);
}
}
}
}