我使用 SharedPreferences 来存储三个变量。
vib_a_strength_shared, vib_b_strength_shared, vib_c_strength_shared
我的onCreate方法如下所示:
public class SettingsActivity extends MainActivity {
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
private static int vib_a_strength;
private static int vib_b_strength;
private static int vib_c_strength;
@Override
protected void onCreate(Bundle savedInstanceState) {
sharedPreferences = this.getSharedPreferences(
"de.somecode.bachelorarbeit", Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.apply();
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_screen);
checkConnection();
back();
vib_a_listener();
vib_b_listener();
vib_c_listener();
}
然后我有三个等效的方法,如:
private void vib_a_listener() {
vib_a_strength = sharedPreferences.getInt(getString(R.string.vib_a_strength_shared), 120);
final TextView vib_a_text_view = (TextView) findViewById(R.id.vib_a_strength);
vib_a_text_view.setText(getString(R.string.strength_text, vib_a_strength));
SeekBar vib_a_seekBar = (SeekBar) findViewById(R.id.vib_a_seek_bar);
vib_a_seekBar.setMax(255);
vib_a_seekBar.setProgress(vib_a_strength);
vib_a_seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
vib_a_text_view.setText(getString(R.string.vib_a_progress, progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
vib_a_strength = seekBar.getProgress();
editor.putInt(getString(R.string.vib_a_strength_shared), vib_a_strength);
editor.commit();
}
});
}
一切正常,三个SeekBar状态都正确更新,但是当我检查代码时出现警告。
它说:格式化字符串''vib_a_strength_shared''没有引用带编号的参数[1], 格式化字符串''vib_b_strength_shared''没有引用带编号的参数[1,2], 格式化字符串''vib_c_strength_shared''未引用带编号的参数[1,2,3]
我的strings.xml如下所示:
<string name="vib_a_strength_shared">%2$d</string>
<string name="vib_b_strength_shared">%3$d</string>
<string name="vib_c_strength_shared">%4$d</string>
我知道正确的方法是将%1 $ d作为占位符,但如果我将%1 $ d放在这三个字符串名称中,则SeekBar值仅设置为最后一次更改的值。 而不是三个不同的价值观。
我希望你能帮我解决这个格式化字符串值警告。
非常感谢。