我有一个等式,结果显示在TextView中。 然后我有另一个TextView就像一个历史。这个历史记录我想用文件保存,应该重新加载应用程序后重新加载该文件。
我不明白的是,第二个TextView是我将保存的视图,在启动应用程序后会显示出奇怪的东西
这一遍又一遍。
android.widget.TextView{41852c0 VFED.VCL ..... ID32,316-419,351 #7f09000a app:id/tvHistory}
我自己的代码:
final static String FILENAME = "marks.txt";
mNotenHistory=(TextView)findViewById(R.id.tVhistory);
mNotenHistory.setMovementMethod(new ScrollingMovementMethod());
private void loadTextfromFile()
{
File f = new File(getFilesDir(),FILENAME);
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String line;
try {
while ((line = br.readLine()) != null)
{
mNotenHistory.setText(line+"\n"+mNotenHistory.getText());
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View view)
{
[...]
mNotenHistory.setText(mNotenHistory.getText() + "\n" + string_note);
String noten_history_string = String.valueOf(mNotenHistory);
try {
FileOutputStream fo = openFileOutput(FILENAME, Context.MODE_APPEND);
fo.write(noten_history_string.getBytes());
fo.write("\n".getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
以下是违规行:
String noten_history_string = String.valueOf(mNotenHistory);
从Android文档中查看此定义:
public static String valueOf(Object value)
在API级别1中添加
将指定对象转换为其字符串表示形式。如果对象为null,则返回字符串“null”,否则使用
toString()
来获取字符串表示。
TextView
类从toString()
类继承View
。这是它的定义:
public String toString ()
在API级别1中添加返回一个字符串,其中包含此对象的简洁,可读的描述。鼓励子类重写此方法并提供考虑对象类型和数据的实现。默认实现等效于以下表达式:
getClass().getName() + '@' + Integer.toHexString(hashCode())
所以这是你的问题。 String.valueOf(mNotenHistory)
不会在文本视图中为您提供文字。因此,您正在为您的文件编写其他内容(特别是您提到的行)。要从TextView
获取文字,请改用getText()
方法。这就是该行的样子:
String noten_history_string = mNotenHistory.getText();
答案 1 :(得分:0)
快速恢复我想要完成的内容。
TextView A获取每个新计算后清晰的等式的结果。 为了保存结果,有TextView B. 结果应该在TextView B中从botton写到顶部,以便最新的在顶部。 同时它应该将TextView的内容写入文件。
关闭/终止应用程序并重新打开它后,TextView B将显示所有已保存的数据。
重置按钮应清除文件的所有内容,使其为空。