我是android studio的新手,我有这个textview,显示存储到我的文本文件的数据。如果我单击该按钮,它应该读取文本文件中的数据,添加整数,总和应该替换文本文件中的现有数据。但是,当我返回显示文本文件中带有新数据的textView的活动时,它不会改变。
这是我的textView
的代码 txt_stars = (TextView) findViewById(R.id.txtStars);
try {
FileInputStream fileInputStream = openFileInput("Stars.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuffer stringBuffer = new StringBuffer();
String star;
while ((star=bufferedReader.readLine()) != null){
stringBuffer.append(star);
}
txt_stars.setText(stringBuffer.toString());
}
catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
按钮的代码
Integer stars, totalStars;
public void onClick(DialogInterface dialog, int whichButton) {
try {
FileInputStream fileInputStream = openFileInput("Stars.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuffer stringBuffer = new StringBuffer();
String star;
while ((star = bufferedReader.readLine()) != null) {
stringBuffer.append(star);
}
stars = Integer.parseInt(stringBuffer.toString());
totalStars = stars + 50;
//is this acceptable?
FileOutputStream fileOutputStream = openFileOutput("Stars.txt", MODE_PRIVATE);
fileOutputStream.write(totalStars.toString().getBytes());
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Intent nextForm = new Intent(".MainActivity");
startActivity(nextForm);
}
而且,我在哪里可以找到手机中创建的文本文件,以便确保创建文本文件?我正在使用Android studio 1.5.1并将应用程序运行到我的手机上。
我的清单文件中有这个。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我有什么办法找到并创建文本文件吗?
我被困在这里好几天了。请帮我。 非常感谢!
答案 0 :(得分:2)
这可能是因为您在保存方法中读取文件时FileNotFoundException
。当您尝试更新文件并写入文件时,不要将try/catch
方法分开,以免在读取部分出现异常,从而阻止继续执行脚本并更新文件。也许这是在Logcat中打印但你还没看看
因此,我建议您检查文件是否已存在并分开读/写部分。
当您第一次阅读该文件以在TextView
中显示该文件时,只需检查它是否已创建以避免出现后台异常:
File f = new File(getFilesDir().toString() + "/stars.txt");
Log.v("", "Does the file exist? " + f.exists());
if (f.exists()) {
readFile();
}
您可以在此处查看应存储文件的位置(在getFilesDir()
中)。默认情况下,当您使用openFileInput(String)
时会选择路径,并且它是:
数据/数据/ com.package.name /文件/
您必须记住,您实际上并未在代码中创建/files
文件夹,例如,我必须自己创建它才能使用上述方法。 (这可能只是我的设备,但您要注意这可能会阻止创建文件。)
现在,您的阅读方法没有太大的变化,这就是它的外观:
private void readFile() {
try {
FileInputStream file = openFileInput("stars.txt");
InputStreamReader inRead = new InputStreamReader(file);
BufferedReader buffReader = new BufferedReader(inRead);
StringBuffer stringBuffer = new StringBuffer();
String star;
while ((star = buffReader.readLine()) != null) {
stringBuffer.append(star);
}
inRead.close();
file.close();
txt_stars.setText(stringBuffer.toString());
} catch (Exception e) {
Log.e("ReadFile", e.toString());
}
}
显然,只有在上一次检查返回true
时才会调用此方法。单击Button
时必须执行相同操作:检查是否存在 - &gt;如果是的话,获取内容,做你的东西(添加,总和等)并写入其中 - &gt;如果没有,只需通过写入就可以创建它
以下内容将起作用:
public void writeFile(View v) {
File f = new File(getFilesDir().toString() + "/stars.txt");
Log.v("", "Does it exist? " + f.exists());
String result = "";
if ( f.exists() ) {
try {
FileInputStream file = openFileInput("stars.txt");
InputStreamReader inRead = new InputStreamReader(file);
BufferedReader buffReader = new BufferedReader(inRead);
StringBuffer stringBuffer = new StringBuffer();
String star;
while ((star=buffReader.readLine()) != null) {
stringBuffer.append(star);
}
result = stringBuffer.toString();
inRead.close();
file.close();
} catch (Exception e) {
Log.e("WriteFile", "--- Error on reading file: "+e.toString());
}
} else {
// get the user's star or whatever
result = editRating.getText().toString();
}
Log.v("WriteFile", "--- Read file returns: " + result);
stars = Integer.parseInt(result);
totalStars = stars + 50;
try {
FileOutputStream fileOut = openFileOutput("stars.txt", MODE_PRIVATE);
OutputStreamWriter outputWriter = new OutputStreamWriter(fileOut);
outputWriter.write(String.valueOf(totalStars));
outputWriter.close();
fileOut.close();
// display file saved message
Toast.makeText(getBaseContext(), "File saved", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e(" WriteFile", e.toString());
}
}
此时,当您返回上一个活动时,您应该能够看到更改。
但是,为了查看存储中的文件,遗憾的是您必须拥有root设备,否则为you'll see an empty folder。最后,您要避免重新启动活动。您应该完成编辑,这将返回上一个,您只需在readFile()
而不是onResume()
中拨打onCreate()
。它会将新内容更新为TextView
。
答案 1 :(得分:0)
您是否在开始新活动之前尝试更新textview?例如:
txt_start.setText(""+totalStars);