Hallo, allerseits!
Beim Ändern meiner Lib, JDroidLib, musste ich auch Universal Android Toolkit ändern. Seit dem ich dieses tat, kriege ich eine NullPointerException, obwohl im Code alles richtig ist. Ich bin den Code mehrere Male durchgegangen, konnte aber keinen Fehler im Code feststellen.
Der NullPointerException tritt auf, wenn das Programm den Ladezustand des Akkus vom angeschlossenen Gerät ziehen will.
Unten sind die Methoden, wo das alles auftritt (geht bis in die Lib):
Ich kann keinen Fehler entdecken, und das Einige, was ich geändert habe, ist die Tatsache, dass statt der oberen Control-Klasse (wo alle Commands und Prozesse ausgeführt werden), die Klasse ADBController genommen wird, und dann immer dieselbe Instanz, damit auch alle Parameter mitgenommen werden.
Ich hoffe ihr entdeckt was, was mir verborgen bleibt, und dass ihr mir helfen könnt.
Vielen, vielen Dank im Voraus!
Beim Ändern meiner Lib, JDroidLib, musste ich auch Universal Android Toolkit ändern. Seit dem ich dieses tat, kriege ich eine NullPointerException, obwohl im Code alles richtig ist. Ich bin den Code mehrere Male durchgegangen, konnte aber keinen Fehler im Code feststellen.
Der NullPointerException tritt auf, wenn das Programm den Ladezustand des Akkus vom angeschlossenen Gerät ziehen will.
Unten sind die Methoden, wo das alles auftritt (geht bis in die Lib):
Methode in UAT:
Methoden in JDroidLib:
Um eine neue Instanz vom Gerät zu kriegen:
Constructor der Instanz:
Neue Instanz der Battery des Gerätes kriegen:
Und letztendlich den Akkustand vom Gerät ziehen:
Java:
private void getBattery(String serial) {
try {
int batteryLevel = adbController.getDevice(serial).getBattery().getLevel();
if (batteryLevel <= 25) {
jLabel1.setIcon(new ImageIcon(this.getClass().getResource("/eu/m4gkbeatz/androidtoolkit/resources/battery/battery_empty-32.png")));
} else if (batteryLevel <= 50) {
jLabel1.setIcon(new ImageIcon(this.getClass().getResource("/eu/m4gkbeatz/androidtoolkit/resources/battery/quarter-32.png")));
} else if (batteryLevel <= 75) {
jLabel1.setIcon(new ImageIcon(this.getClass().getResource("/eu/m4gkbeatz/androidtoolkit/resources/battery/battery_half-32.png")));
} else if (batteryLevel < 100) {
jLabel1.setIcon(new ImageIcon(this.getClass().getResource("/eu/m4gkbeatz/androidtoolkit/resources/battery/battery_third-32.png")));
} else if (batteryLevel == 100) {
jLabel1.setIcon(new ImageIcon(this.getClass().getResource("/eu/m4gkbeatz/androidtoolkit/resources/battery/battery_full-32.png")));
} else {
jLabel1.setIcon(new ImageIcon(this.getClass().getResource("/eu/m4gkbeatz/androidtoolkit/resources/battery/battery-32.png")));
}
jLabel1.setText(batteryLevel + "%");
} catch (/*IO*/Exception ex) {
log.log(LogLevel.SEVERE, "ERROR: Error getting battery level from device!");
log.log(LogLevel.SEVERE, "Error message: " + ex.toString());
log.log(LogLevel.INFO, "Printing stack trace to standard error stream.");
ex.printStackTrace(System.err);
}
}
Methoden in JDroidLib:
Um eine neue Instanz vom Gerät zu kriegen:
Java:
public Device getDevice(String serial) {
return new Device(serial, this);
}
Constructor der Instanz:
Java:
public Device(String deviceSerial, ADBController adbController) {
this.serial = deviceSerial;
this.adbController = adbController;
su = new SU(serial, adbController);
busybox = new BusyBox(serial, adbController);
battery = new Battery(serial, adbController);
cpu = new CPU(serial, adbController);
buildProp = new BuildProp(serial, adbController);
}
Neue Instanz der Battery des Gerätes kriegen:
Java:
public Battery getBattery() { return battery; }
Und letztendlich den Akkustand vom Gerät ziehen:
Java:
private void update() throws IOException {
String[] commands = {"dumpsys", "battery"};
String raw = adbController.executeADBCommand(true, false, serial, commands);
BufferedReader reader = new BufferedReader(new StringReader(raw));
String line = "";
while ((line = reader.readLine()) != null) {
if (line.equals("Current Battery Service State:")) continue;
if (line.contains("AC powered:")) {
String[] arr = line.split(": ");
isACPowered = Boolean.valueOf(arr[1]);
}
if (line.contains("USB powered: ")) {
String[] arr = line.split(": ");
isUSBPowered = Boolean.valueOf(arr[1]);
}
if (line.contains("Wireless powered: ")) {
String[] arr = line.split(": ");
isWirelessPowered = Boolean.valueOf(arr[1]);
}
if (line.contains("status: ")) {
String[] arr = line.split(": ");
batteryStatus = Integer.valueOf(arr[1]);
}
if (line.contains("health: ")) {
String[] arr = line.split(": ");
batteryHealth = Integer.valueOf(arr[1]);
}
if (line.contains("present: ")) {
String[] arr = line.split(": ");
isPresent = Boolean.valueOf(arr[1]);
}
if (line.contains("level:")) {
String[] arr = line.split(": ");
batteryLevel = Integer.valueOf(arr[1]);
}
if (line.contains("scale: ")) {
String[] arr = line.split(": ");
batteryScale = Integer.valueOf(arr[1]);
}
if (line.contains("voltage: ")) {
String[] arr = line.split(": ");
batteryVoltage = Integer.valueOf(arr[1]);
}
if (line.contains("current now: ")) {
String[] arr = line.split(": ");
currentBatteryCurrent = Integer.valueOf(arr[1]);
}
if (line.contains("temperatur: ")) {
String[] arr = line.split(": ");
batteryTemp = Integer.valueOf(arr[1]);
}
if (line.contains("technology: ")) {
String[] arr = line.split(": ");
batteryTechnology = arr[1];
}
}
}
public int getLevel() throws IOException { update(); return batteryLevel; }
Ich kann keinen Fehler entdecken, und das Einige, was ich geändert habe, ist die Tatsache, dass statt der oberen Control-Klasse (wo alle Commands und Prozesse ausgeführt werden), die Klasse ADBController genommen wird, und dann immer dieselbe Instanz, damit auch alle Parameter mitgenommen werden.
Ich hoffe ihr entdeckt was, was mir verborgen bleibt, und dass ihr mir helfen könnt.
Vielen, vielen Dank im Voraus!