0

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


       }
4

2 回答 2

0

快速恢复我想要完成的事情。

TextView A 在每次新计算后得到一个等式的结果。为了保存结果,有 TextView B。结果应该在 TextView B 中从底部到顶部写入,以便最新的在顶部。同时它应该将 TextView 的内容写入文件。

关闭/杀死应用程序并重新打开后,TextView B 将显示所有保存的数据。

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

于 2013-07-01T15:51:32.947 回答
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();
于 2013-06-30T22:05:32.230 回答