在我的应用程序中,用户可以保存程序将连接到的服务器配置文件。 因为我不知道用户将添加的连接配置文件的数量,我不能简单地将它放在SettingsActivity
中。在设置中存储新数据
因为我不想和XML打扰再次文件我想我可以只保存SharedPreferences是这样的:
server1hostname
server1username
server1password
server2hostname
server2username
server2password
server3hostname
server3username
server3password
第一个问题:是否有更好的方法,如果我想要把一切都在标准偏好文件(与创建我自己的文件的地方相反)?
第二个问题:我已经实现了这个或多或少。奇怪的是:它适用于现有设置(最初通过SettingsActivity
创建),但不适用于新条目。
这里的源代码(Powerline
是服务器配置文件的类名):
@Override
public void onBackPressed() {
super.onBackPressed();
// Save powerline item
Powerline newPowerline = new Powerline();
newPowerline.setAddress(etAddress.getText().toString());
newPowerline.setSendPort(Integer.parseInt(etSendPort.getText().toString()));
newPowerline.setReceivePort(Integer.parseInt(etReceivePort.getText().toString()));
newPowerline.setUsername(etUsername.getText().toString());
newPowerline.setPassword(etPassword.getText().toString());
int powerlinePositionInSettings = getIntent().getIntExtra("powerlinePositionInSettings", -1);
if (option.equals("create")) {
if (newPowerline.create(this, powerlinePositionInSettings))
finish();
} else {
if (powerlinePositionInSettings >= 0)
if (newPowerline.change(this, powerlinePositionInSettings))
finish();
}
}
这里是Powerline
类的创建功能:
public boolean create(Context context, int powerlinePositionInSettings) {
String positionString = String.valueOf(powerlinePositionInSettings);
Log.i("Powerline", "Saving new powerline to settings to position " + positionString + ".");
try {
SharedPreferences.Editor prefsEditor = PreferenceManager.getDefaultSharedPreferences(context).edit();
prefsEditor.putString("powerline" + positionString + "Address", this.getAddress());
prefsEditor.putString("powerline" + positionString + "SendPort", String.valueOf(this.getSendPort()));
prefsEditor.putString("powerline" + positionString + "ReceivePort", String.valueOf(this.getReceivePort()));
prefsEditor.putString("powerline" + positionString + "Username", this.getUsername());
prefsEditor.putString("powerline" + positionString + "Password", getPassword());
Log.i("Prefs", "Saving \"" + "powerline" + positionString + "Address" + "\" to be \"" + this.getAddress() + "\"");
return prefsEditor.commit();
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
这里是改变功能Powerline
等级:
public boolean change(Context context, int powerlinePositionInSettings) {
String positionString = String.valueOf(powerlinePositionInSettings);
Log.i("Powerline", "Saving powerline to settings to position " + positionString + ".");
try {
SharedPreferences.Editor prefsEditor = PreferenceManager.getDefaultSharedPreferences(context).edit();
prefsEditor.putString("powerline" + positionString + "Address", this.getAddress());
prefsEditor.putString("powerline" + positionString + "SendPort", String.valueOf(this.getSendPort()));
prefsEditor.putString("powerline" + positionString + "ReceivePort", String.valueOf(this.getReceivePort()));
prefsEditor.putString("powerline" + positionString + "Username", this.getUsername());
prefsEditor.putString("powerline" + positionString + "Password", getPassword());
Log.i("Prefs", "Saving \"" + "powerline" + positionString + "Address" + "\" to be \"" + this.getAddress() + "\"");
return prefsEditor.commit();
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
Va通过更改功能存储的信息实际上已被保存。由create函数保存的新值不是。
有没有人有想法?在这两个功能中我没有看到任何显着差异。
我可能是错的,但是你不暴露用户密码的情况下,该设备的根源? – Oren 2013-02-18 09:42:30
是的,你是对的。一般的存储过程后,我会添加一些加密。 – Jens 2013-02-18 09:48:03
你有任何logcat错误? – bmavus 2013-02-18 09:57:49