So,
erstmal die vollständige Log-Zeile:
08-09 21:24:33.160 30008-30075/com.gumproductions.gu_meyer.cubecontrol.app D/OpenGLRenderer: endAllActiveAnimators on 0x9df89700 (ListPopupWindow$DropDownListView) with handle 0x9df47bb0
Aber: Der Tipp von @Pascal P. war gut - bei genauerer Analyse der Routine decodeCubeMessage habe ich herausgefunden, dass sich der Task wohl immer noch in der While-Schleife befindet.
Zum besseren Verständnis hier diese Routine:
public void decodeCubeMessage(InputStream CubeRawDataStream) {
InputStreamReader isr = new InputStreamReader(CubeRawDataStream);
BufferedReader br = new BufferedReader(isr);
Log.d("ccn", "decodeCubeMessage");
try {
String MessageZeile = "";
while ((MessageZeile = br.readLine()) != null) {
if (!MessageZeile.equals("")) {
char msgtyp = MessageZeile.charAt(0);
switch (msgtyp) {
case 'H': {
Log.d("ccn", "Message H");
String CubeMessage = MessageZeile.substring(3, MessageZeile.length());
List<String> msgstrl = new ArrayList<String>(Arrays.asList(CubeMessage.split(",")));
// Die Stringliste enthält zeilenweise die einzelnen Einträge
cDevice4 AktDevice = new cDevice4(); // ein einzelnes "Device"
AktDevice.setDeviceTypeSelector(0); // es ist bekannt, dass es um den Cube geht
AktDevice.setCubeCubeSerialNumber(msgstrl.get(0));
AktDevice.setCubeCubeRFAddress(msgstrl.get(1));
// Jetzt das Device in die Liste eintragen
CubeNetz.add(AktDevice);
}
case 'C': {
break;
}
case 'L': {
break;
}
case 'M': {
Log.d("ccn", "Message M");
// diese Message kommt mehrfach vor
String CubeMessage = MessageZeile.substring(3, MessageZeile.length());
List<String> msgstrl = new ArrayList<String>(Arrays.asList(CubeMessage.split(",")));
int MessageIndex = parseInt(msgstrl.get(0));
int MessageCount = parseInt(msgstrl.get(1));
String DataString = msgstrl.get(2);
// Decodierung von Base64 nach String
byte[] DecodedBytes = Base64.decode(DataString, Base64.NO_WRAP);
DecodedBytes = copyOfRange(DecodedBytes, 2, DecodedBytes.length);
Log.d("ccn", "Anfang Zerlegung Message in Räume");
int CubeMMsg_RoomCount = DecodedBytes[0]; // ist nur ein Zeichen lang
DecodedBytes = copyOfRange(DecodedBytes, 1, DecodedBytes.length);
for (int RaumIndex = 0; RaumIndex < CubeMMsg_RoomCount; RaumIndex++) {
cDevice4 AktDevice = new cDevice4();
AktDevice.setDeviceTypeSelector(1); // 1 = Raum
AktDevice.setRaumID(DecodedBytes[0]);
DecodedBytes = copyOfRange(DecodedBytes, 1, DecodedBytes.length);
int LaengeRaumName = DecodedBytes[0];
AktDevice.setRaumNameLaenge(LaengeRaumName);
DecodedBytes = copyOfRange(DecodedBytes, 1, DecodedBytes.length);
String RaumNameStr = new String();
for (int index = 0; index < LaengeRaumName; index++) {
byte bRaumNameByte = DecodedBytes[index];
RaumNameStr += (char) bRaumNameByte;
}
AktDevice.setRaumName(RaumNameStr);
DecodedBytes = copyOfRange(DecodedBytes, LaengeRaumName, DecodedBytes.length);
String RaumGroupAdress = new String();
for (int index = 0; index < MSG_M_ROOMRFADDRESS_LENGTH; index++) {
byte bRaumRFAByte = DecodedBytes[index];
RaumGroupAdress += (char) bRaumRFAByte;
}
AktDevice.setRaumRFAdresse(RaumGroupAdress);
CubeNetz.add(AktDevice);
DecodedBytes = copyOfRange(DecodedBytes, MSG_M_ROOMRFADDRESS_LENGTH, DecodedBytes.length); // damit ist das Array verkürzt
// Jetzt nach einem ähnlichen Schema die Geräte den Räumen zuordnen (wobei diesmal die Räume bereits existieren)
}
Log.d("ccn", "Räume zerlegt");
Log.d("ccn", "Anfang Zerlegung Devices");
int GeraeteAnzahl = DecodedBytes[0];
DecodedBytes = copyOfRange(DecodedBytes, 1, DecodedBytes.length);
for (int GeraeteIndex = 0; GeraeteIndex < GeraeteAnzahl; GeraeteIndex++) {
cDevice4 AktDevice = new cDevice4();
AktDevice.setDeviceTypeSelector(2);
AktDevice.setDeviceType(DecodedBytes[0]);
DecodedBytes = copyOfRange(DecodedBytes, 1, DecodedBytes.length);
String DevRFA = new String();
for (int index = 0; index < MSG_M_DEVICERFA_LENGTH; index++) {
byte bDevRfaByte = DecodedBytes[index];
DevRFA += (char) bDevRfaByte;
}
AktDevice.setDeviceRFAddress(DevRFA);
DecodedBytes = copyOfRange(DecodedBytes, MSG_M_DEVICERFA_LENGTH, DecodedBytes.length);
// Device-Serial-Number
String DevSN = new String();
for (int index = 0; index < MSG_M_DEVICE_SERIAL_LENGTH; index++) {
byte bDevSnByte = DecodedBytes[index];
DevSN += (char) bDevSnByte;
}
AktDevice.setDeviceSeriennummer(DevSN);
DecodedBytes = copyOfRange(DecodedBytes, MSG_M_DEVICE_SERIAL_LENGTH, DecodedBytes.length);
// Länge Device-Name (aus 1 Zeichen)
int DevNameLen = DecodedBytes[0];
DecodedBytes = copyOfRange(DecodedBytes, 1, DecodedBytes.length);
String DevNameStr = new String();
for (int index = 0; index < DevNameLen; index++) {
byte bDevNameByte = DecodedBytes[index];
DevNameStr += (char) bDevNameByte;
}
AktDevice.setDeviceName(DevNameStr);
DecodedBytes = copyOfRange(DecodedBytes, DevNameLen, DecodedBytes.length);
// Device-Raum-ID
int DevRaumID = DecodedBytes[0];
AktDevice.setDeviceRoomID(DevRaumID);
DecodedBytes = copyOfRange(DecodedBytes, 1, DecodedBytes.length);
CubeNetz.add(AktDevice);
}
Log.d("ccn", "Zerlegung Devices beendet");
Log.d("ccn", "End case M");
break;
}
}
Log.d("ccn", "Zurück zum Switch-Case");
}
Log.d("ccn", "Leerzeile gefunden");
}
Log.d("ccn", "Schleifenlauf beendet"); //<<<<------ diese Logmeldung kriege ich nicht mehr - da läuft was falsch!!!
} catch (FileNotFoundException e) {
Log.d("ccn", "Fehler gefangen (FileNotFoundException)");
e.printStackTrace();
} catch (IOException e) {
Log.d("ccn", "Fehler gefangen (IOException)");
e.printStackTrace();
}
Log.d("ccn", "decodeMessage durchgelaufen");
}
Jetzt muss ich herausfinden, wie ich eine solche Schleife abbrechen kann. Leider kenn ich die Anzahl der möglichen Zeilen inder Message nicht. Außerdem hatte ich gedacht, dass ich bereits alle nötigen Abfragen eingebaut habe.
Falls es hilft, hier noch die Original-Message.
H:KEQ0837268,0cd86d,0113,00000000,441229eb,00,32,100204,1313,03,0000
M:00,01,VgIFAQpXb2huemltbWVyC3GmAgxTY2hsYWZ6aW1tZXILhkADBULDvHJvC3HYBApCYWRlemltbWVyC5ILBQxHw6RzdGV6aW1tZXILYC8FAQuGQEtFUTA0NDY3NDcIU2NobGFmZW4CAQtx2EtFUTA0NDk1NDkFQsO8cm8DAQuSC0tFUTA0NDYxODADQmFkBAELcaZLRVEwNDQ5NTcwCldvaG56aW1tZXIBAQtgL0tFUTA0NTA1NjcMR8Okc3RlemltbWVyBQE=
C:0cd86d,7QzYbQATAf9LRVEwODM3MjY4AAsABEAAAAAAAAAAAP///////////////////////////wsABEAAAAAAAAAAQf///////////////////////////2h0dHA6Ly9tYXguZXEtMy5kZTo4MC9jdWJlADAvbG9va3VwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENFVAAACgADAAAOEENFU1QAAwACAAAcIA==
C:0b71a6,0gtxpgEBGP9LRVEwNDQ5NTcwLCYzCQcKA3Cr/wBMNlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIEw2WG5QzVkVTSBNIE0gRSBFIEUgRSBFIEUgTDZYblDNWRVNIE0gTSBFIEUgRSBFIEUgRSBMNlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIEw2WG5QzVkVTSBNIE0gRSBFIEUgRSBFIEUgTDZYblDNWRVNIE0gTSBFIEUgRSBFIEUgRSBMNlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIA==
C:0b602f,0gtgLwEFGP9LRVEwNDUwNTY3LCYzCQcKA3Cr/wBMNlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIEw2WG5QzVkVTSBNIE0gRSBFIEUgRSBFIEUgTDZYblDNWRVNIE0gTSBFIEUgRSBFIEUgRSBMNlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIEw2WG5QzVkVTSBNIE0gRSBFIEUgRSBFIEUgTDZYblDNWRVNIE0gTSBFIEUgRSBFIEUgRSBMNlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIA==
C:0b71d8,0gtx2AEDGP9LRVEwNDQ5NTQ5LCYzCQcKA3Cr/wBQNlhuWM5ZFU0gTSBNIEUgRSBFIEUgRSBFIFA2WG5YzlkVTSBNIE0gRSBFIEUgRSBFIEUgUDZYbljOWRVNIE0gTSBFIEUgRSBFIEUgRSBQNlhuWM5ZFU0gTSBNIEUgRSBFIEUgRSBFIFA2WG5YzlkVTSBNIE0gRSBFIEUgRSBFIEUgUDZYbljOWRVNIE0gTSBFIEUgRSBFIEUgRSBQNlhuWM5ZFU0gTSBNIEUgRSBFIEUgRSBFIA==
C:0b920b,0guSCwEEGP9LRVEwNDQ2MTgwLCYzCQcKA3Cr/wBQKlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIFAqWG5QzVkVTSBNIE0gRSBFIEUgRSBFIEUgUCpYblDNWRVNIE0gTSBFIEUgRSBFIEUgRSBQKlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIFAqWG5QzVkVTSBNIE0gRSBFIEUgRSBFIEUgUCpYblDNWRVNIE0gTSBFIEUgRSBFIEUgRSBQKlhuUM1ZFU0gTSBNIEUgRSBFIEUgRSBFIA==
C:0b8640,0guGQAECGP9LRVEwNDQ2NzQ3LCYyCQUKA3Cr/wBYKlhuVM5ZFVkgWSBZIEUgRSBFIEUgRSBFIFgqWG5UzlkVWSBZIFkgRSBFIEUgRSBFIEUgWCpYblTOWRVZIFkgWSBFIEUgRSBFIEUgRSBYKlhuVKhZFVkgWSBZIEUgRSBFIEUgRSBFIFgqWG5UzlkVWSBZIFkgRSBFIEUgRSBFIEUgWCpYblTOWRVZIFkgWSBFIEUgRSBFIEUgRSBYKlhuVJBZFVkgWSBZIEUgRSB
FIEUgRSBFIA==
L:CwtxpvESGFosALsACwtgLwMaGEssAMYACwtx2AkSGAAKAOoACwuSCwkSGE4sAL0ACwuGQAkSGAAKAPAA
Ich weiß im Lauf der Dekodierung dieser Message, wieviele Teilmessages enthalten sind - kann ich dieses Wissen evtl. irgendwie nutzen? Wenn ja, wie?
Gruss
G.-U.M.
N'y pas n'y
tu car tu
mal tu mal