首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要获得NetworkOnMainThread异常错误onProgressUpdate

为什么我要获得NetworkOnMainThread异常错误onProgressUpdate
EN

Stack Overflow用户
提问于 2019-04-19 17:57:15
回答 1查看 28关注 0票数 0

在填充完"/proc/net/arp“文件后,我使用AsyncTask读取它。问题是,在我读完每一行之后,我想对每个ip地址进行名称解析。这就是我得到异常错误的时候。我不会在主线程上执行这个操作,因为我对这个进程使用了AsyncTask。这是我的onProgressUpdate方法

代码语言:javascript
复制
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.
                }
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-19 18:28:48

我不会在主线程上执行这个操作,因为我对这个进程使用了AsyncTask。这是我的onProgressUpdate方法

在主线程上调用onProgressUpdate()方法。AsyncTask

onProgressUpdate(Progress...),在调用publishProgress(Progress...)后在UI线程上调用。执行的时间未定义。此方法用于在后台计算仍在执行时显示用户界面中的任何形式的进度。例如,它可以用于在文本字段中动画进度条或显示日志。

doInBackground()中执行任何应该在UI线程上执行的代码

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55765848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档