2016-11-20 13 views
0

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など)に対して他の多くのアプローチを見てきましたが、誰かが同じことをするための試してテストされた方法をお勧めすることができますか?

答えて

0

List<String> headingsは決して初期化しません。

すでにこれらを読んで、あなたは(たとえば:what's wrong with HTMLParser?)望んでいた答えが得られなかった場合 - その後、あなたの前提条件について詳しく説明してください。

+0

初期化後にありがとう 'リスト fromIndex = new ArrayList (); 一覧たtoIndex =新しいArrayListを(); ' と '見出し=新しいArrayListを(); ' アプリが完璧に動作します。 私はあなたの提案されたリンクを読みますが、それらを実装することは私がすでに持っているものを使うよりも良いと思いますか? –

+0

に依存します。これが生産コードの場合、完全にテストされ、文書化されています。外部APIは常にIMOの方が優れています。これが宿題/勉強/回り道の場合は、自分のためにひもを試してみることは、理解とカスタム機能のために完全に優れています。あなたのニーズを考え、決定します。 :) – MordechayS

+0

ありがとうございました:) –

関連する問題