我正在使用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.
}
}
}
答案 0 :(得分:2)
我没有在主线程上执行此操作,因为我为此使用了AsyncTask 处理。这是我的onProgressUpdate方法
在主线程上调用了onProgressUpdate()
方法 。 From the Documentation for AsyncTask
:
onProgressUpdate(Progress...)
,在调用后在UI线程上调用 到publishProgress(Progress...)
。执行的时间是 未定义。此方法用于显示进度中的任何形式的进度 用户界面,而后台计算仍在执行。 例如,它可以用于为进度栏设置动画或显示日志 一个文本字段。
执行应在doInBackground()
中的UI线程上完成的所有代码