2013-06-30 54 views
0

我有一個公式,其結果顯示在TextView中。 然後我有另一個TextView,就像一個歷史。這個歷史我想保存一個文件,並且應用程序將被重新啓動後重新加載文件。FileoutputStream/bufferreader

請告訴我,我不明白的是,第二的TextView其認爲,我將節省一遍遍啓動應用

Thise線後顯示奇怪的東西。

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類繼承了ViewtoString()。下面是它的定義:

public String toString() 在API級別1

返回包含此對象的簡明的,人類可讀的描述的字符串。鼓勵子類覆蓋此方法並提供一個考慮對象類型和數據的實現。默認實現等效於以下表達式:getClass().getName() + '@' + Integer.toHexString(hashCode())

所以這是您的問題。 String.valueOf(mNotenHistory)確實不是給你文本視圖內的文本。因此,你正在寫文件的其他內容(特別是你提到的那一行)。要獲得TextView中的文字,請改爲使用getText()方法。這是什麼行應該看起來像:

String noten_history_string = mNotenHistory.getText(); 
+0

感謝您的解釋,但它仍然無法正常工作。如果我改變這些行Android Studio會拋出一個錯誤「Incompatible Types Required:java.lang.String Found:java.lang.CharSequence。快速修復會 - >使用String.ValueOf強制轉換爲java.lang.String或Wrap它正在工作,但不完全像我想要的 – Qpa

+0

當你做出改變時,什麼是寫入你的文本文件? – AbsentMoniker

+0

如果我在TextView中編寫6.0 \ n 1.0,並且它在電視上正確顯示如果我關閉/該應用程序,並根據資源管理器手動觀看文件有一個\ n 1.0 \ n 1.0 \ n 6.0。如果我重新啓動應用程序只有一個6.0。 – Qpa

0

快速恢復我想要一個complish。

TextView A得到方程的結果,在每次新計算後清晰。 爲了保存結果,需要TextView B. 結果應該在TextView B中從底部開始寫入頂部,以便最新的頂部。 同時它應該將TextView的內容寫入文件中。

關閉/關閉App並重新打開之後,TextView B將顯示所有保存的數據。

重置按鈕應該清除文件的所有內容,以便它將爲空。