2016-05-20 93 views
1

我是Android Development和Java的新手。請多多包涵。直到最後纔讀取文件

因此,我正在製作一個應用程序,它從網頁列表中打開一個隨機網頁 該代碼讀取包含所有鏈接的資產文件夾中的文本文件,並製作鏈接列表,然後選擇一個隨機。

所以問題是我已經把日誌消息,以檢查程序是否正在讀取和填充數組,直到文本的最後一行。

日誌消息顯示列表的大小爲1301.而我的文本文件包含2601個鏈接。 我似乎無法理解我會出錯的地方。

這裏是Java代碼片斷,

int sd=0; 
    List<String> links=new ArrayList<>(); 
    try { 
     AssetManager assetManager = getAssets(); 
     InputStream assetIn = assetManager.open("android"); 
     BufferedReader r = new BufferedReader(new InputStreamReader(assetIn)); 
     while (r.readLine() != null) { 
      links.add(r.readLine()); 
      sd++; 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
     Random r=new Random(); 
     //String len= Integer.toString(links.size()); 

     String len= Integer.toString(sd); 
     Log.i("total loop",len); 
     String randomLink=links.get(r.nextInt(links.size())); 
     Log.i("link select :",randomLink); 
     webView.loadUrl(randomLink); 
+2

請保持打字:你沒有問這個問題呢。 –

+1

也許他不小心打到帖子給他一秒鐘之前投票下地獄:) – Maantje

+1

你按下輸入過快嗎? –

回答

2

您可以在循環中閱讀線條:

1)while (r.readLine() != null) { 2)links.add(r.readLine());

所以它應該是:

String line = ""; 
    while ((line = r.readLine()) != null) { 
     links.add(line); 
     sd++; 
    } 
2

要調用readLine()兩次,這樣就可以讀取兩行,而不是1在每次迭代:

while (r.readLine() != null) { // reads a line 
    links.add(r.readLine()); // reads another line 
    sd++; // increments by 1 every *2* lines read 
} 

你可能想使用:

while ((line = r.readLine()) != null) { 
    links.add(line); 
    sd++; 
} 
相關問題