FileoutputStream / bufferreader

时间:2013-06-30 19:36:39

标签: android fileoutputstream

我有一个等式,结果显示在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();
           }


       }

2 个答案:

答案 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将显示所有已保存的数据。

重置按钮应清除文件的所有内容,使其为空。