我有一个具体的问题。我有一个有很多活动的应用程序。在活动“settings.class”中,我创建了“config.txt”文件并保存 - 一切正常。当我尝试在同一个活动中读取此文件时,我得到一个我保存到此文件中的字符串。但是,当我关闭此活动“settings.class”并返回“MainActivity.class”并尝试从此“config.txt”文件中读取时,我得到一个旧的字符串,该字符串在未实际保存之前存储...
我通过重启我的应用程序解决了我的问题,之后一切正常。但我想知道为什么会这样。
这是我的代码:
这是在类实用程序中:
public void WriteSettingFile(String txt_msg, Context ctx) throws IOException
{
FileOutputStream fp = null;
fp = ctx.openFileOutput("edog_con.txt",Context.MODE_PRIVATE);
fp.write(txt_msg.getBytes());
fp.close();
}
private String ReadSettingFile(Context ctx) throws IOException
{
FileInputStream fp;
String tmp_string;
StringBuilder sb = null;
fp = ctx.openFileInput("edog_con.txt");
if (fp != null)
{
InputStreamReader isr = new InputStreamReader(fp);
BufferedReader br = new BufferedReader(isr);
sb = new StringBuilder();
while( (tmp_string = br.readLine()) != null)
{
sb.append(tmp_string);
}
fp.close();
}
return sb.toString();
}
// Vrati ulozene telefonne cislo
public String GetPhoneNumber (Context ctx)
{
String tmp = "";
String[] casti;
// Nacitanie suboru. Ak nie je, tak vrat chybu
try
{
tmp = ReadSettingFile(ctx);
}
catch (IOException e)
{
return "err";
}
// Ak retazec obsahuje ',' - mal by - tak pokracuj. Ak nie chyba
if (tmp.contains(","))
{
// rozdel string na dve casti - pred a po ciarke. pred je tel. cislo
casti = tmp.split(",");
}
else
return "err";
return casti[0];
}
这是在我写入.txt文件的Setting.class中。当我尝试从此活动类中的文件读取时,一切正常,我将实际数据保存到.txt文件中
public class Settings extends Activity
{
....
// Save button and so on
...
Utilities ut = new Utilities();
try
{
ut.WriteSettingFile(save_info, Settings.this);
}
catch (IOException e)
{
alert_msg.setMessage(R.string.alert_bad_file).show();
}
// I have to reset the application instead of this - and then it works
Settings.this.finish();
....
}
当我尝试从这个片段Water.class中的文件中读取时,我读到以前保存的字符串并未实际保存。我必须重置应用程序,所以之前的“Settings.this.finish()” 我不使用,我以编程方式重置整个应用程序。
Water.class
public class Water extends Fragment
{
...
Utilities ut = new Utilities();
String data;
...
// This gets an old saved string in .txt file
data = ut.GetPhoneNumber(this.getActivity())
}