私のアプリケーションでは、ユーザーはプログラムが接続するサーバー プロファイルを保存できます。ユーザーが追加する接続プロファイルの量がわからないので、単純にSettingsActivity
.
XML ファイルに再び煩わされたくなかったので、次のように SharedPreferences を保存できると考えました。
server1hostname
server1username
server1password
server2hostname
server2username
server2password
server3hostname
server3username
server3password
最初の質問: すべてを標準設定ファイルに保持したい場合 (どこかに独自のファイルを作成するのとは対照的に)、より良い方法はありますか?
2 番目の質問: 私はすでに多かれ少なかれこれを実装しています。奇妙なことに、既存の設定 (最初に で作成されたもの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
クラスの create 関数は次のとおりです。
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;
}
}
change 関数によって格納された値は実際に保存されます。create 関数によって保存された新しい値はそうではありません。
誰かアイデアがありますか?2 つの機能に大きな違いは見られません。