0
    CalendarParse parser = new CalendarParse();
            parser.countSundays(this);  



public class CalendarParse  {

        String calString = "";
        Document cal = null;
        InputStream is = null;


        public void countSundays(Context context)
        {
            AssetManager assMan = context.getAssets();

            try
            {
                System.out.println("Trying");
                InputStream is = assMan.open("assets/brownbear.html");
                if (is == null){
                    Log.i("FAIL","File not found.");
                }
                else{
                    Log.i("SUCCESS","We did it");
                }
               Document cal = Jsoup.parse(is, "utf-8", "ob stuff");
                Element calBlock =  cal.select("table#CalBlock").first();
               Element calRows = calBlock.select("tr").get(0);
              Log.i("SUCCESS","Parsing has occurred");
                System.out.println(calRows.toString());

            }
            catch(IOException e){
                System.out.println("IO Exception at local calendar asset");
            }


        }

brownbear.html位于 assets 文件夹中,并将其写入 Main Activity。最初它是一个单独的 .java 类,但是当它在 Main Activity 之外时,我无法准确地确定“上下文”如何影响 AssetManager,并且我试图在故障排除时减少未知数。

正如所写,“尝试”打印出来,没有 Log.i 打印出来(大概是因为我们在

InputStream is = assMan.open("assets/brownbear.html");

) “本地日历资产的 IO 异常”总是打印出来。

如果我将该行更改为

assMan.open("brownbear.html");

然后 "SUCCESS" "We did it" 运行,但发生致命异常:

2019-02-01 02:28:06.069 5637-5637/?E/AndroidRuntime:致命异常:主进程:com.myapplication.schedulo,PID:5637 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.myapplication.schedulo/com.myapplication.schedulo.MainActivity}:java.lang。 NullPointerException:尝试在空对象引用上调用虚拟方法“org.jsoup.select.Elements org.jsoup.nodes.Element.select(java.lang.String)”

我究竟做错了什么??

4

1 回答 1

1
Element calBlock =  cal.select("table#CalBlock").first();
Element calRows = calBlock.select("tr").get(0);

NullPointerException 位于第二行,因为第一个 ( calBlock) 的结果为空。您应该检查为什么选择器"table#CalBlock"与您想要的不匹配。尝试分析文档的 HTMLcal并检查它是否包含<table ...>with id CalBlock。您确定要解析的页面不使用 JavaScript 动态/异步加载某些片段吗?

于 2019-02-01T08:47:08.473 回答