我一直在尝试使用config.properties文件来保存服务器网址,以及我正在制作的应用程序。
我已成功从文件中读取并显示但我需要用户才能编辑该文件。
到目前为止,我一直在寻找可能的解决方案,但没有运气。这是第一次用任何编程语言做这种事情,所以任何帮助都会受到赞赏!
这是我在SettingsDialog中的代码(我希望用户能够修改设置)。
public class SettingsDialog extends Dialog {
Context context;
SettingsDialog dialog;
PropertyReader propertyReader;
Properties prop;
EditText url;
public SettingsDialog(Context context){
super(context);
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_settings_test);
dialog = this;
//let's try this
Resources res = context.getResources();
AssetManager am = res.getAssets();
try{
InputStream is = am.open("config.properties");
prop = new Properties();
prop.load(is);
}catch(IOException e){
System.err.println("Failed to open config.properties file");
e.printStackTrace();
}
//well what do you know, it worked as well
// propertyReader = new PropertyReader(context);
// prop = propertyReader.getMyProperties("config.properties");
//Elements on Dialog
EditText port = (EditText) findViewById(R.id.settings_port);
url = (EditText) findViewById(R.id.settings_url);
Button btnOk = (Button) findViewById(R.id.settings_ok);
Button btnCancel = (Button) findViewById(R.id.settings_cancel);
url.setText(prop.getProperty("server_url").toString());
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prop.setProperty("server_url", url.getText().toString());
try {
prop.store(am.openFd("config.properties").createOutputStream(), null);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(context, prop.getProperty("server_url"), Toast.LENGTH_LONG).show();
dialog.dismiss();
}
});
getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
}
}
我在编写这个答案时尝试使用prop.store,但是一旦我的应用程序重新启动,它就会回到config.properties文件中的原始值。
任何人都知道如何处理这个迫切需要的代码?
答案 0 :(得分:0)
在对这个问题做了更多的阅读之后,结果发现(或者至少是我从中得到的东西)写在" assets"中的属性文件中。文件夹不可能。
我使用SharedPreferences
而不是工作,它会做它应该做的事情。
这是我现在使用的代码SharedPreferences
:
public class SettingsDialog extends Dialog {
Context context;
SettingsDialog dialog;
EditText url;
SharedPreferences sp;
public SettingsDialog(Context context){
super(context);
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_settings_test);
dialog = this;
//using SharedPreferences
sp = context.getSharedPreferences("mobile_mover", Context.MODE_PRIVATE);
//Elements on Dialog
EditText port = (EditText) findViewById(R.id.settings_port);
url = (EditText) findViewById(R.id.settings_url);
Button btnOk = (Button) findViewById(R.id.settings_ok);
Button btnCancel = (Button) findViewById(R.id.settings_cancel);
url.setText(sp.getString("server_url", "http://www.sharedpreferencesrock.eu"));
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.edit().putString("server_url", url.getText().toString()).commit();
dialog.dismiss();
}
});
getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
}
}