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, когда он находится за пределами основного действия, и я пытаюсь устранить неизвестные при устранении неполадок.

Как написано, «Попытка» распечатывается, а 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) для нулевой ссылки на объект

Что я делаю не так??


person PatchesDK    schedule 01.02.2019    source источник


Ответы (1)


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

NullPointerException находится во второй строке, потому что результат первого (calBlock) равен нулю. Вы должны проверить, почему селектор "table#CalBlock" не соответствует тому, что вы хотите. Попробуйте проанализировать HTML документа cal и проверить, содержит ли он <table ...> с id CalBlock. Вы уверены, что страница, которую вы анализируете, не использует JavaScript для динамической/асинхронной загрузки некоторых фрагментов?

person Krystian G    schedule 01.02.2019
comment
Ты сделал это. Спасибо. - person PatchesDK; 01.02.2019