2016-11-20 81 views
0

我試圖動態提取Android應用上的一些HTML標記(如<h4>,<h3>,<h2>)之間的文本。我試圖編寫代碼,但是當我嘗試調用函數時,應用程序崩潰。嘗試查找HTML標記之間的文本時出錯

這裏是我的代碼:

import java.util.ArrayList; 
import java.util.List; 

public class Extractor { 

    String code = ""; //--------------------------------Some HTML Code 
    List<Integer> fromIndex , toIndex; 
    List<String> headings; 


    public void populate() { 

     int index; 

     ArrayList<String> oTag = new ArrayList<>(); 
     oTag.add("<h4>"); 
     oTag.add("<h3>"); 
     oTag.add("<h2>"); 

     for (String ot : oTag) { 
      index = code.indexOf(ot); 
      while (index >= 0) { 
       fromIndex.add(index + ot.length()); 
       index = code.indexOf(ot, index + ot.length()); 
      } 
     } 

     ArrayList<String> cTag = new ArrayList<>(); 
     cTag.add("</h4>"); 
     cTag.add("</h3>"); 
     cTag.add("</h2>"); 

     for (String ct : cTag) { 
      index = code.indexOf(ct); 
      while (index >= 0) { 
       toIndex.add(index); 
       index = code.indexOf(ct, index + ct.length()); 
      } 
     } 

     for(int i = 0 ; i < toIndex.size() ; i++) 
     { 
      headings.add(code.substring(fromIndex.get(i),toIndex.get(i))); 
     } 
    } 
} 

通過Android Studio中顯示的錯誤是:

java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference 
         at com.myuser.hplap.myapp.Extractor.populate(Extractor.java:50) 
         at com.myuser.hplap.myapp.MainActivity$1.onClick(MainActivity.java:38) 
         at android.view.View.performClick(View.java:5204) 
         at android.view.View$PerformClick.run(View.java:21158) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5461) 

變量code從活動發送與網頁,但表示它的完整的HTML代碼簡單地說,我已經將它列入同一個班級。另外,在爲此尋找解決方案的同時,我也看到了許多其他解決同一問題的方法(例如:正則表達式,XPath,HtmlCleaner等),但我很困惑哪種方法最適合我。有人可以推薦一個經過實踐檢驗的方法嗎?

回答

0

您從不初始化List<String> headings

約在HTML標籤的問題,我認爲這將讓你開始:

如果您已經閱讀這些,並沒有得到你想要的答案(例如:what's wrong with HTMLParser?) - 那麼請詳細說明你的先決條件。

+0

感謝您的回覆,初始化後 'List fromIndex = new ArrayList (); 列表 toIndex = new ArrayList ();' 和 'headings = new ArrayList ();' 該應用程序完美工作。 我會讀入你建議的鏈接,你認爲執行這些會比使用我已有的更好嗎? –

+0

取決於。如果這是生產代碼 - 完全測試和記錄外部API總是更好IMO。如果這是家庭作業/學習/搞亂 - 爲自己嘗試丁字褲對理解和自定義功能來說是完全更好的。考慮你的需求 - 並做出決定。 :) – MordechayS

+0

非常感謝:) –