我一直在网上搜索我的答案的解决方案,已经浏览了所有文档,并在发布我自己的问题之前浏览了多个论坛。我需要通过文件保存信息,因为我的功能
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("PointCount", pointCount);
savedInstanceState.putInt("UpOneCost", upOne);
savedInstanceState.putInt("UpTwoCost", upTwo);
savedInstanceState.putInt("TimerTime", upgradeTime);
super.onSaveInstanceState(savedInstanceState);
Toast.makeText(this, "Saving", Toast.LENGTH_LONG).show();
}
onSaveInstanceState仅在我不完全清楚的特定时间间隔内工作。但是,我知道当活动被销毁时它不会被调用。上面的函数是mySaveInstanceState函数,下面是我的restoreInstanceState函数
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Toast.makeText(this, "Restoring", Toast.LENGTH_LONG).show();
if(savedInstanceState != null){
pointCount = savedInstanceState.getInt("PointCount");
upOne = savedInstanceState.getInt("UpOneCost");
upTwo = savedInstanceState.getInt("UpTwoCost");
upgradeTime = savedInstanceState.getInt("TimerTime");
if(upgradeTime < 5500){
startTimer();
}
TextView pointCountText = (TextView)findViewById(R.id.myTextView1);
pointCountText.setText("Points: " + Integer.toString(pointCount));
TextView pointCountText2 = (TextView)findViewById(R.id.upgradeScreenPointText);
pointCountText2.setText("Points: " + Integer.toString(pointCount));
Button upButtonOne = (Button)findViewById(R.id.upButton1);
upButtonOne.setText("Cost: " + Integer.toString(upOne));
Button upButtonTwo = (Button)findViewById(R.id.upButton2);
upButtonTwo.setText("Cost: " + Integer.toString(upTwo));
TextView myTimerValue = (TextView)findViewById(R.id.myTimerValueText);
myTimerValue.setText("Current Time: " + Integer.toString(upgradeTime));
}
}
在那里有一些无用的信息,但是当我点击Android设备上的后退按钮时总体上没有运行,所以经过一些研究后,我决定将它保存到文件目录中。这是我在我的android项目文件中创建了一个名为“saveFile”的文件。它是一个文本文件,它与我的mainActivity.java文件位于同一目录中,以便删除文件范围的复杂性。为了达到这个文件,我得出了覆盖onDestroy()函数并尝试
的结论String fileName = "saveFile";
FileOutputStream outputStream;
@Override
protected void onDestroy() {
super.onDestroy();
outputStream.openFileOutput(fileName, Context.MAKE_PRIVATE);
}
此时我已经停止了,因为它无法找到该文件。文档不清楚这个文件应该在哪里进行目录明智,并且就创建和编写它而言也非常模糊。如果有人能够对所有的工作方式做出非常明确的解释,我将非常感激它。谢谢=)注意一些代码可能包含一些小错误,因为我输入了一些代码而不是复制粘贴,但想法就在那里。我在编辑器中收到的唯一错误是在outputStream.openFileOutput()行上,它表示无法找到该文件。
答案 0 :(得分:2)
要进行文件操作,您应指定完整的文件路径。 仅传递文件名将抛出FileNotFoundException。
您可以执行以下操作之一; 1.将文件保存在应用缓存中。 filePath = appContext.getCacheDir()。getAbsolutePath()+“yourFileName”;
将文件保存在app data目录中。 filePath = Environment.getDataDirectory()。getPath()+ File.separator +“data”+ File.separator + appContext.getPackageName()+ File.separator +“yourFileName”;
将文件保存在SD卡的某个文件夹中。 File sdCard = Environment.getExternalStorageDirectory(); String filePath = sdCard.getAbsolutePath()+ File.separator + BASE_FOLDER_ON_SD_CARD + File.separator +“yourFileName”;
对于第三个选项,您可能需要在应用程序的AndroidManifest.xml中添加WRITE_EXTERNAL_STORAGE权限。
此外,保存文件应该在您的活动的onStop()方法中进行,并且读取文件内容应该在onResume()中进行 使用存储位置的文件。
答案 1 :(得分:0)
你可以这样做。
private void writeToFile(String data) {
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput("config.txt", Context.MODE_PRIVATE));
outputStreamWriter.write(data);
outputStreamWriter.close();
}
catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
}
}
private String readFromFile() {
String ret = "";
try {
InputStream inputStream = openFileInput("config.txt");
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ( (receiveString = bufferedReader.readLine()) != null ) {
stringBuilder.append(receiveString);
}
inputStream.close();
ret = stringBuilder.toString();
}
}
catch (FileNotFoundException e) {
Log.e("login activity", "File not found: " + e.toString());
} catch (IOException e) {
Log.e("login activity", "Can not read file: " + e.toString());
}
return ret;
}
但是对于每个对象,您必须创建具有不同名称的单独文件。
希望这会对你有帮助..
答案 2 :(得分:0)
下面是在android中存储数据的方法:
答案 3 :(得分:0)
public void Save(String fileName) {
try {
OutputStreamWriter out = new OutputStreamWriter(openFileOutput(fileName, 0));
out.write(EditText1.getText().toString());
out.close();
Toast.makeText(this, fileName + " saved!", Toast.LENGTH_SHORT).show();
} catch (Throwable t) {
Toast.makeText(this, "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
}
}