Android/Java - исключение ввода-вывода - кажется, не может загрузить актив HTML
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 находится в папке активов, и это записано в основной активности. Первоначально это был отдельный класс.java, но я не смог точно определить, как именно "Контекст" влияет на AssetManager, когда он находится вне основной активности, и я пытаюсь смягчить неизвестные при устранении неполадок.
Как написано, "Trying" распечатывает, а Log.i не распечатывает (предположительно, потому что мы терпим неудачу в
InputStream is = assMan.open("assets/brownbear.html");
) "Исключение ввода-вывода в локальном календаре" всегда печатается.
Если я изменю эту строку на
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)' для ссылки на пустой объект
Что я делаю неправильно??
1 ответ
Element calBlock = cal.select("table#CalBlock").first();
Element calRows = calBlock.select("tr").get(0);
NullPointerException находится во второй строке, потому что результат первой (calBlock
) нулевой. Вы должны проверить, почему селектор "table#CalBlock"
не соответствует тому, что вы хотите. Попробуйте проанализировать HTML документа cal
и проверьте, содержит ли он <table ...>
с идентификатором CalBlock
, Вы уверены, что анализируемая страница не использует JavaScript для динамической / асинхронной загрузки некоторых фрагментов?