if (STRING.equals("") wird einfach nicht behandelt. Keine Fehler oder Errors

  • Antworten:19
DmanT
  • Forum-Beiträge: 36

17.02.2018, 04:07:11 via Website

Hallo,

ich habe ein Problem mit einer if abfrage. Allerdings kann ich weder einen Fehler finden noch wird irgendetwas geloggt. Vielleicht ist es auch einfach schon zu früh.

Es geht im folgenden Code Ausschnitt:

String test = s.toString();

        if (test.equals("0"))
        {
            Log.d("Logincode:", "0");
            Constants.saveappdata("AUTOLOGIN", "0");
            Constants.Toast("Login fehlgeschlagen.");
        }

        if (test.equals("1"))
        {
            Log.d("Logincode:", "1");
            Constants.saveappdata("AUTOLOGIN", "0");
        }
        Log.i("Logincode:", s);

Hier noch das log dazu

02-17 03:56:34.708 5570-5570/XXXXXXXXXX I/Logincode:: 1

Dann habe ich das ganze mit == null bzw. != null getestet.

String test = s.toString();

        if (test == null)
        {
            Log.d("Logincode:", "0");
            Constants.saveappdata("AUTOLOGIN", "0");
            Constants.Toast("Login fehlgeschlagen.");
        }

        if (test != null)
        {
            Log.d("Logincode:", "1");
            Constants.saveappdata("AUTOLOGIN", "0");
        }
        Log.i("Logincode:", s);

Und das log dazu:

02-17 04:00:50.926 6962-6962/XXXXXXXXXX  D/Logincode:: 1
02-17 04:00:50.932 6962-6962/XXXXXXXXXX  I/Logincode:: 0

02-17 04:01:03.604 6962-6962/XXXXXXXXXX D/Logincode:: 1
02-17 04:01:03.612 6962-6962/XXXXXXXXXX  I/Logincode:: 1

Vielleicht weiss ja jemand von euch weiter.

Kommentieren
swa00
  • Forum-Beiträge: 3.704

17.02.2018, 07:40:13 via Website

Hallo,
a) Auch hier vermute ich deinen "Constant" Fehler -> siehe Singleton - Klammer das mal aus
(Siehe auch meine Antwort im anderen Thread)

b) Tip : setze alles mal in einen Try / catch und gib die Exceptions in einem Log aus
c) Tip : Schon mal das Ganze Step by Step debuggt ?
d) Wenn schon ein Log, dann unterscheide im TAG. So wüsste ich auch nicht , wo ich bin

— geändert am 17.02.2018, 08:36:37

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
LudyPascal P.
Kommentieren
DmanT
  • Forum-Beiträge: 36

17.02.2018, 09:53:51 via Website

Guten Morgen schonwieder g so schnell ist die Nacht vorbei. So es funktioniert und ein

test.trim().equals("0");

brachte dann den Erfolg. Ein "blödes" trim(). Da haben wir es ja "mal wieder. Wegen einem blöden "leerzeichen". Naja trim werde ich mir dann merken.

— geändert am 17.02.2018, 09:54:15

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.02.2018, 10:04:09 via App

Wenn du es richtig machst, bildest du ein LoginStatus auch nicht als String sondern als int oder als Enum ab. Dann hast du diese ganzen Probleme nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
swa00Ludy
Kommentieren
DmanT
  • Forum-Beiträge: 36

17.02.2018, 10:32:34 via Website

Das wird alles Serverseitig abgearbeitet und dann gibt's per HTTP als String 1 oder 0 zurück. Es muss es string sein da der string auch so zurück kommen kann

0&DATENRESPONSE&FOO&BAR&...

Für den ersten test habe ich erst nur 1 und 0 geschickt. Aber das muss noch erweitert werden mit

String [] tempvar = test.trim().split("&");

Und dann wird nicht nur der Code verarbeitet sondern eben noch mehr daher muss ich auf String zurückgreifen.

Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

17.02.2018, 10:38:01 via Website

OT :

Wenn wir Dir auch gerne helfen und du in deinem Coding-Wahn bist :

Ein "Danke" (oder zumindest den Knopf) hören wir auch gerne .............

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.02.2018, 10:43:59 via App

Vielleicht solltest du dir mal anschauen, wie man das heutzutage professionell löst:
z.b. http://jsonapi.org/examples/
Einfach etwas als String als Http Response zu schicken ist schon längst aus der Mode gekommen ;) Das macht es dir für Erweiterungen in 2+ Jahren nur schwieriger.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Ludyswa00
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.958

17.02.2018, 10:44:02 via App

DmanT

0&DATENRESPONSE&FOO&BAR&...

Ich will keinem zu nah treten, aber solche Stringfolgen, ohne Differenzierung wird dir früher oder später auf die Füße fallen.

SOLL: status=0&response=foo,bar&

— geändert am 17.02.2018, 10:44:20

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Pascal P.swa00
Kommentieren
DmanT
  • Forum-Beiträge: 36

17.02.2018, 10:53:56 via Website

Ja, also, ähm, da hast du schon recht, "normalerweise" nutzt man hier strings wie status=0&foo=0&bar=0&..=..&..=..&..=..

Allerdings,

  1. Baue ich das Protokoll Dokumentiert auf dem Server so dass auch andere DEVs es nachvollziehen können

  2. Habe ich hier direkt alles mit theoretisch einer Zeile

    String[] data = s.trim().toString().split("&");

Wenn ich nun das Protokoll kenne (Dokumentation) habe ich in data[x]; immer die Daten die ich direkt brauche. Klar könnte ich auch immer die Zuweisung der Daten die als nächsten folgen mit &foo= mitsenden, müsste hier aber das Array nochmal mittels split() und Schleife durchlaufen damit ich wieder ein sortiertes Array nur mit den Daten habe die ich wirklich benötige.

— geändert am 17.02.2018, 10:55:18

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.02.2018, 10:56:18 via App

Ja aber warum eigenes Protokoll wenn es auf diesem Gebiet weit verbreitete Standards gibt??
Das ist doch viel einfacher zu verstehen und zu handeln....

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
swa00
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.958

17.02.2018, 10:59:18 via App

Ich kann nur aus meinen Erfahrungen sprechen, json ist, wie Pascal schon erwähnt hat, der beste Weg für soetwas. Es sieht zwar am Anfang viel aus, aber wenn du gson-Lib nutzt kannst du deine Modells in eigene Klassen auslagern und schneller anpassen, wenn was geändert werden muss.

p.s. ist meine Meinung

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
swa00Pascal P.
Kommentieren
DmanT
  • Forum-Beiträge: 36

17.02.2018, 11:25:05 via Website

Klar, da gebe ich euch natürlich vollkommen recht, jedoch, ich denke das ihr das nachvollziehen könnt, arbeiten wir in einem Team von 3 eingefleischten "alten Hasen". Wir haben bisher immer als Team sehr überzeugen können. Allerdings müssen wir auch viel Bitbanging betreiben und mikrocontroller Software mit php, c, python verbinden. Damit wir es einheitlich haben nutzen wir als "standart" eben das mikrocontroller standart Protokoll allerdings noch mit & dazwischen. Normalerweise sieht das Protokoll dann so aus das erst die Datenmenge und dann Datenmenge mal 8 bits kommt. Und dies haben wir halt komplett übernommen

[DATENMENGE] [DATEN_FÜR] [DATEN]

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.02.2018, 11:41:00 via App

Ich nehme an deine Webschnittstelle ist serverseitig mit PHP:
Dann kannst du zumindest auf PHP eine Api aufsetzen und diese dann z.b. sowas bauen:
https://www.nextpit.de/forum/721529/tutorial-fuer-fortgeschrittene-android-an-eine-php-rest-api-anbinden

Das geht auch in PHP Objektorientiert.

Versuche wenigstens, die Anbindung nach außen über eine saubere Api abzubilden. Was das PHP und der Microcontroller tut isr dabei egal. Nur willst du dein komisches Protokoll z.b. für Windows Clients oder IOS sollte das mal dazukommen neu implementieren? Mit json findest du für jedes System Implemetationen mit denen man das sehr einfach auswerten kann.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Ludy, Rafael K. und 1 mehr LudyRafael K.swa00
Kommentieren
DmanT
  • Forum-Beiträge: 36

17.02.2018, 11:48:20 via App

Nein. Serverseitig läuft auch hier unser eigener HTTP Server in python der nichts anderes kann ausser die Daten zu verarbeiten. Und der kennt eben nur unser Protokoll.

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.02.2018, 11:54:54 via App

Naja, wenn du willst kannst du auch Python das als Json ausgeben lassen:
https://stackoverflow.com/a/15538391

Allerdings scheint es mir dass dir unsere Ratschläge völlig egal sind. Dann musst du dich aber auch nicht wundern, wenn wir auf deine Probleme nicht direkt eingehen, denn du hast diese Probleme nur, da du keine Standards nutzt...

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
swa00
Kommentieren
swa00
  • Forum-Beiträge: 3.704

17.02.2018, 12:01:18 via Website

@Dman

Du hast im anderen Thread geschrieben :

Du wirst vermutlich die Hände über dem Kopf zusammenschlagen aber ok.

Ja, tun wir ( und das jetzt schon 4 Leute an der Zahl)

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
LudyPascal P.
Kommentieren
DmanT
  • Forum-Beiträge: 36

17.02.2018, 12:15:51 via Website

Ludy

Kurze Frage: Ist das nur für euch, oder soll das produktiv werden?

Also was heißt produktiv? Es soll Produktiv, allerdings für uns laufen, also nur Firmenintern, keine Vermarktung/Verbreitung etc.

Pascal P.

....
Allerdings scheint es mir dass dir unsere Ratschläge völlig egal sind.
....

Oh nein, keineswegs. Der Hinweis zu dem Callback war gut und eigentlich genau das was ich suchte. Ich wusste nur nicht genau wie es heißt. Ich lese mich derzeit darüber ein.

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.958

17.02.2018, 12:24:41 via App

DmanT

Also was heißt produktiv? Es soll Produktiv, allerdings für uns laufen, also nur Firmenintern, keine Vermarktung/Verbreitung etc.

Produktiv meine ich ehr, trägt es zum Geldverdienen bei?

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren