【问题标题】:Android/Java - IO Exception - can't seem to load HTML assetAndroid/Java - IO 异常 - 似乎无法加载 HTML 资产
【发布时间】:2019-02-01 08:34:47
【问题描述】:
    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”“我们做到了”运行,但发生致命异常:

2019-02-01 02:28:06.069 5637-5637/? E/AndroidRuntime: 致命异常: main 进程: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)' 在空对象引用上

我做错了什么??

【问题讨论】:

    标签: java android jsoup android-assetmanager


    【解决方案1】:
    Element calBlock =  cal.select("table#CalBlock").first();
    Element calRows = calBlock.select("tr").get(0);
    

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

    【讨论】:

    • 你成功了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2012-09-23
    • 2021-09-19
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多