Почему я получаю сообщение об ошибке исключения NetworkOnMainThread onProgressUpdate - PullRequest
0 голосов
/ 19 апреля 2019

Я использую AsyncTask для чтения файла "/ proc / net / arp" после его заполнения. проблема в том, что после прочтения каждой строки я хочу выполнить разрешение имен для каждого IP-адреса. и вот тогда я получаю ошибки исключения. Я не выполняю это в основном потоке, так как я использую AsyncTask для этого процесса. это мой метод onProgressUpdate

protected void onProgressUpdate(Void... params) {
            //update progress bar
            /*scanProgress.setProgress(values[0].progressBar);*/
            try {

                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(ARP_TABLE), "UTF-8"));
                reader.readLine(); // Skip header.
                String line;
                while ((line = reader.readLine()) != null) {
                    Log.v("ARPFILE", line);
                    String[] arpLine = line.split("\\s+");
                    //if arp line contains flag 0x2 we parse host
                    if(arpLine[2].equals(ARP_FLAG)) {
                        final String ip = arpLine[0];
                        final String flag = arpLine[2];
                        final String mac = arpLine[3];
                        Node node = new Node(ip, mac);
                        hostList.add(node);
                        networkAdapter.notifyDataSetInvalidated();
//                        scanProgress.setProgress(node.progressBar);
                    }
                }
                reader.close();
            }
            catch (Exception ex) {

            }

            for(Node node: hostList) {
                InetAddress inetAddress;
                android.os.Debug.waitForDebugger();
                try {
                    inetAddress = InetAddress.getByName(node.ip);
                    String hostname = inetAddress.getCanonicalHostName();
                    node.setHostName(hostname);
                    Log.v("HOSTNAME", hostname);
                } catch (UnknownHostException e) {
                    // It's common that many discovered hosts won't have a NetBIOS entry.
                }
            }
        }

1 Ответ

2 голосов
/ 19 апреля 2019

Я не выполняю это в главном потоке, так как я использую AsyncTask для этого процесс. это мой метод onProgressUpdate

Метод onProgressUpdate() - это , вызываемый в главном потоке. Из документации на AsyncTask:

onProgressUpdate(Progress...), вызывается в потоке пользовательского интерфейса после вызова до publishProgress(Progress...). Сроки исполнения не определено. Этот метод используется для отображения любой формы прогресса в пользовательский интерфейс во время выполнения фоновых вычислений. Например, его можно использовать для анимации индикатора выполнения или отображения логов в текстовое поле.

Выполнить любой код, который должен быть выполнен из потока пользовательского интерфейса в doInBackground()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...