Reputation: 832
This is my code:
public void setAreaAccessPoints(){
String mac = "",essid = "",status = "";
int strength = 0,kanali = 0;
List<String> AccessPoints = new ArrayList<String>(); //i lista me ta access points
String temp;
try{
String[] command = {"/bin/sh", "-c", "sudo iwlist " + wirelessName + " scanning | grep -A5 \"Cell\" "};
Process child = Runtime.getRuntime().exec(command);
BufferedReader r = new BufferedReader(new InputStreamReader(child.getInputStream()));
while((temp = r.readLine()) != null){
if(temp.contains("Cell")){
String[] info = temp.split(" ");
mac = info[3];
System.out.println(mac);
do{
temp = r.readLine();
if(temp.contains("ESSID:")){
essid = temp.replace("ESSID:","");
}
if(temp.contains("Frequency:")){
String[] info1 = temp.split(" ");
info1[3] = info1[3].replace(")","");
kanali = Integer.parseInt(info1[3]);
}
if(temp.contains("Mode:")){
status = temp.replace("Mode:","");
}
if(temp.contains("Quality=")){
String[] info2 = temp.split(" ");
info2[3] = info2[3].replace("level=","");
strength = Integer.parseInt(info2[3]);
}
if(temp.contains("Protocol:")){
temp = r.readLine();
}
}while(!(temp.contains("Cell")));
AccessPoint newAP = new AccessPoint(mac,essid,kanali,status,strength);
AccessPoints.add(newAP.toString()); //vazoume ta access points sti lista san strings
}
}
r.close();
for(String s : AccessPoints)
System.out.println(s);
}catch(IOException e){e.printStackTrace();}
}
The output which i am parsing looks like this:
Cell 04 - Address: 00:05:59:30:C1:7C
Protocol:802.11b/g
ESSID:"NA home"
Mode:Managed
Frequency:2.437 GHz (Channel 6)
Quality=2/100 Signal level=-89 dBm Noise level=-92 dBm
--
Cell 05 - Address: 00:05:59:43:AE:C9
Protocol:802.11b/g
ESSID:"NetFasteR IAD 2 (PSTN)"
Mode:Managed
Frequency:2.437 GHz (Channel 6)
Quality=0/100 Signal level=-91 dBm Noise level=-94 dBm
--
Cell 06 - Address: 00:05:59:3B:C1:FA
Protocol:802.11b/g
ESSID:"Kpanagiotou"
Mode:Managed
Frequency:2.437 GHz (Channel 6)
Quality=0/100 Signal level=-91 dBm Noise level=-94 dBm
--
The error is in the 2 lines "strength = Integer.parseInt(info2[2]);"
and "kanali = Integer.parseInt(info1[3]);"
... I can't seem to figure out where is the problem. When I am splitting the string, the info I want is in the second and third field according to the output. So why does it try to pass a null
string for integer parsing?
StackTrace:
Exception in thread "Thread-1" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at askisi1.Wireless.setAreaAccessPoints(Wireless.java:213)
at askisi1.Wireless.run(Wireless.java:43)
at java.lang.Thread.run(Thread.java:722)
Upvotes: 0
Views: 2266
Reputation: 183978
The line
Quality=2/100 Signal level=-89 dBm Noise level=-92 dBm
contains double spaces, so in the split
result, you have empty String
s and the non-empty String
s are not at the indices you think they are.
Printing out the result of "Quality=2/100 Signal level=-89 dBm Noise level=-92 dBm".split(" ");
with indices yields
0: Quality=2/100
1:
2: Signal
3: level=-89
4: dBm
5:
6: Noise
7: level=-92
8: dBm
You seem to have leading spaces in your file, so the indices with nonempty String
s would be later then.
Upvotes: 1
Reputation: 6572
Since you have spaces in-front of the lines you are getting wrong part for to format without any spaces in both sides your logic is working
you could do trim() and check your result
temp = r.readLine().trim();
For example this is working
String str ="Frequency:2.437 GHz (Channel 6)";
String [] str1 = str.split(" ");
System.out.println(Integer.parseInt(str1[3].replace(")", "")));
Upvotes: 0
Reputation: 22206
You remove "level=" from info2[1] and then don't do anything with it later. You should remove it from info2[2]. Also, note that they are separated by double spaces as noted in another answer here.
Upvotes: 0
Reputation: 2260
you are checking for something and replacing something else...
if(temp.contains("Quality=")){
String[] info2 = temp.split(" ");
info2[1] = info2[1].replace("level=","");
strength = Integer.parseInt(info2[2]);
}
Upvotes: 1