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 类,但是当“上下文”在主活动之外时,我无法准确确定“上下文”如何影响 AssetManager,并且我试图在排除故障时减轻未知数。
正如所写,“尝试”打印出来,没有 Log.i 打印出来(大概是因为我们在
InputStream is = assMan.open("assets/brownbear.html");
) “本地日历资产的 IO 异常”总是打印出来。
如果我将该行更改为
assMan.open("brownbear.html");
然后“成功”“我们做到了”运行,但发生致命异常:
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)”
我究竟做错了什么??
Element calBlock = cal.select("table#CalBlock").first();
Element calRows = calBlock.select("tr").get(0);
NullPointerException 位于第二行,因为第一个 ( calBlock
)的结果为空。您应该检查为什么选择器"table#CalBlock"
与您想要的不匹配。尝试分析文档的 HTMLcal
并检查它是否包含<table ...>
with id CalBlock
。您确定您正在解析的页面不使用 JavaScript 来动态/异步加载某些片段吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句