Androidアプリで<h4>,<h3>,<h2>
のようなHTMLタグの間にあるテキストを動的に抽出しようとしています。コードを書き込もうとしましたが、関数を呼び出そうとすぐにアプリケーションがクラッシュします。ここで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のメーカーによって示されるエラーは次のとおりです。
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
は、Webページの完全なHTMLコードを活動から送信されたが、それを表現するために単純に、私は同じクラスにそれを含めました。
また、この問題の解決策を探しているうちに、私は同じ問題(例:正規表現、XPath、HtmlCleanerなど)に対して他の多くのアプローチを見てきましたが、誰かが同じことをするための試してテストされた方法をお勧めすることができますか?
初期化後にありがとう 'リスト fromIndex = new ArrayList (); 一覧たtoIndex =新しいArrayListを(); ' と '見出し=新しいArrayListを(); ' アプリが完璧に動作します。 私はあなたの提案されたリンクを読みますが、それらを実装することは私がすでに持っているものを使うよりも良いと思いますか? –
に依存します。これが生産コードの場合、完全にテストされ、文書化されています。外部APIは常にIMOの方が優れています。これが宿題/勉強/回り道の場合は、自分のためにひもを試してみることは、理解とカスタム機能のために完全に優れています。あなたのニーズを考え、決定します。 :) – MordechayS
ありがとうございました:) –