我正在尝试将值保存为设备内部存储器中的字符串,以便在关闭应用程序并通过单击其他按钮重新打开时可以访问该值。当我运行程序时,我输入输入A和B的值,我知道它通过计算处理它们,因为我修改了它,以便在计算后立即显示答案。 但是在这个版本上,如果我单击“保存”按钮,然后单击“访问”按钮以显示答案和标记为“上一个答案”的文本视图,它只显示“xx”,这是我正在尝试保存的字符串的初始值。因此要么它不存储包含答案的更新版本,要么Access按钮只能访问字符串的原始值。
Button jSave = (Button) findViewById(R.id.iSave);
Button jAccess = (Button) findViewById(R.id.iAccess);
final String saveName="Name";
final String saveValue = "xx";
jSave.setOnClickListener(
new Button.OnClickListener(){
public void onClick(View v){
//Calculations. These are a part of a more complex series of
//calculations between several classes, but I've simplified it
//somewhat for this post.
EditText jInputA = (EditText)findViewById(R.id.iInputA);
double dInputA = Double.parseDouble(jInputA.getText().toString());
EditText jInputB = (EditText)findViewById(R.id.iInputB);
double dInputB = Double.parseDouble(jInputB.getText().toString());
double myAnswer = Double.parseDouble(ProfileCalculations.functionQ(jInputA, jInputB));
//Update the value of saveValue to match that of myAnswer
final String saveValue = "The answer is " myAnswer;
//Save saveValue as a string under file saveName
try{
FileOutputStream jFOS = openFileOutput(saveName, Context.MODE_PRIVATE);
jFOS.write(saveValue.getBytes());
jFOS.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
);
jAccess.setOnClickListener(
new Button.OnClickListener() {
public void onClick(View v) {
try {
FileInputStream jFIS = openFileInput(saveName);
jFIS.read(saveValue.getBytes());
jFIS.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
}
TextView jPreviousAns = (TextView) findViewById(R.id.iPreviousAns);
jPreviousAns.setText(saveValue + "");
}
}
);
答案 0 :(得分:0)
共享偏好怎么样?这是一个例子。
private SharedPreferences defaultPrefs;
defaultPrefs = PreferenceManager.getDefaultSharedPreferences(this);
String url = "http://www.example.com";
SharedPreferences.Editor ed = defaultPrefs.edit();
ed.putString("homepage", url);
ed.commit();
后来:
String url = defaultPrefs.getString("homepage", "http://www.example.com/some_default_page");
答案 1 :(得分:0)
Android提供了几种保存持久性应用程序数据的选项。您选择的解决方案取决于您的特定需求,例如数据是应该是您的应用程序专用还是其他应用程序(和用户)可访问的数据以及数据所需的空间大小。
您的数据存储选项如下:
共享偏好设置 将私有原始数据存储在键值对中。
内部存储 将私有数据存储在设备内存中。
外部存储空间 将公共数据存储在共享外部存储上。
SQLite数据库 将结构化数据存储在私有数据库中。
网络连接 使用您自己的网络服务器将数据存储在Web上。
对于您给定的应用程序,我认为共享首选项或内部存储将是您的选择。
内部存储:使用此路由,您必须调用 openFileOutput()来启动 FileOutputStream ,并从那里使用 write()将数据写入文件, close()关闭 FileOutputStream 。
例如:
String FILENAME = "hello_file";
String string = "hello world!";
//Initiate
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
//Write to file
fos.write(string.getBytes());
//Close file
fos.close();
共享首选项:如果您要使用此功能,则必须调用 edit()以获取 SharedPrefrencesEditor ,然后添加对此值,您只需使用 putBoolean(), putString()等。一旦完成,您使用 commit()提交数据
例如:
//Initiate Shared Preferences
SharedPreferences.Editor editor = settings.edit();
//Writes data
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();