2011-10-01 191 views
0

我需要這個反向運行,以便線條以與此相反的順序出現。有沒有快速翻轉TextView或類似的東西?謝謝你的幫助。如何從最後一行讀取文本文件到第一個

try { 
// Create a URL for the desired page 
URL url = new URL("text.txt"); 

// Read all the text returned by the server 
BufferedReader MyBr = new BufferedReader(new InputStreamReader(url.openStream())); 
String line; 
line = MyBr.readLine(); 
TextView textview1 = (TextView) findViewById(R.id.textView1); 

StringBuilder total = new StringBuilder(); 

while ((line = MyBr.readLine()) != null) { 
total.append(line + "\r\n");} 

textview1.setText(total); 
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/wonderfull.ttf"); 
TextView tv = (TextView) findViewById(R.id.textView1); 
tv.setTypeface(tf); 
MyBr.close(); 
} catch (MalformedURLException e) { 
} catch (IOException e) { 
} 

回答

1

由於您正在更改代碼中的UI,因此必須在UI線程上運行該代碼。當然,你知道在UI線程上做這樣的I/O是一個禁忌,可以很容易地創建ANR。所以我們只是假設這是僞代碼。你最好的選擇是在你閱讀這個流的時候將事情顛倒過來。例如,您可以使用insert at the front of the StringBuilder

+0

我是一個總noob。不知道UI線程是什麼,我不害怕ANR,但是你的建議讓我過去了我的問題。謝謝! – user974030

+0

您的活動(及其調用的任何代碼)中的代碼在應用程序的主/ UI線程上執行。如果你做了一些需要很長時間(> 100ms)的事情,那麼你的應用程序似乎會暫停並凍結給用戶。如果他們嘗試滾動或點擊按鈕,應用程序將不會響應。用戶不喜歡那樣。如果您將UI線程綁定超過5秒鐘,則Android OS會向用戶顯示一個對話框,指出「Foo Application is Not Responding」。這是一個ANR。它會讓用戶選擇終止你的應用程序。 – michaelg

+0

你不希望發生這種情況。因此產生一個新的線程來完成像從網絡上讀取文件這樣的長時間任務。你可以使用一個好的'ol java.lang.Thread',或者你可以使用android goodness像android.os.AsyncTask。閱讀SDK文檔中的這些類。 如果我的答案有幫助,那麼請接受它。 – michaelg

0

你也可以直接插入編輯:

Editable e = textview1.getEditableText(); 
while ((line = MyBr.readLine()) != null) { 
    e.insert(0, line + "\r\n"); 
} 
0

我將文件讀入到一個數組或數組列表,然後使用for循環將其從最後一個索引打印到第一個索引。

相關問題