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等),但我很困惑哪種方法最適合我。有人可以推薦一個經過實踐檢驗的方法嗎?
感謝您的回覆,初始化後 'List fromIndex = new ArrayList (); 列表 toIndex = new ArrayList ();' 和 'headings = new ArrayList ();' 該應用程序完美工作。 我會讀入你建議的鏈接,你認爲執行這些會比使用我已有的更好嗎? –
取決於。如果這是生產代碼 - 完全測試和記錄外部API總是更好IMO。如果這是家庭作業/學習/搞亂 - 爲自己嘗試丁字褲對理解和自定義功能來說是完全更好的。考慮你的需求 - 並做出決定。 :) – MordechayS
非常感謝:) –