Parameterübergabe für MySQL-Datenbankabfrage

  • 44 Antworten
  • Letztes Antwortdatum
Ich würde vorschlagen, du machst die Server Antwort einzeilig mit Semikolons getrennt. Ein new line verbraucht mindestens so viel Byte wie ein Semikolon, und falls da noch ein carriage return dahinter ist sogar mehr. Dann könntest du dir das einfügen in der doInBackground Methode sparen. Wenn du bei der mehrzeiligen Lösung bleiben willst, würde ich auch hier eine Schleife vorschlagen, dass macht den Code leicht erweiterbar und übersichtlicher (Open-Closed-Prinzip).

ich würde den gesamten String an die aufrufende Klasse zurückgeben, und dort die Auswertung durchführen, das spart einen weiteren Switch und der Task macht nur das wofür er zuständig ist, Anfragen an den Server zu schicken und die Antwort zu empfangen (Single-Responsibility-Prinzip).
Alternativ könntest du mit Varargs arbeiten um das Ergebnis an die aufrufende Klasse zu geben. So oder so bringt es dir nichts neue Referenzen auf die Arrayeinträge zu erzeugen, da du in der Schnittstelle zur aufrufenden Klasse dann wieder ein Array hättest.

Wo genau ist jetzt dein Problem mit den EditText? Mit der Methode setText bekommst du die Werte in die Felder, wie du an die Einzelwerte Kommst, hast du ja schon gepostet. An die einzelnen EditText kommst du mit der methode findViewById in einer Subklasse von Activity, aber das solltest wissen, denn du hast ja auch schon Textfelder ausgewertet um den Aufruf des AsyncTask zu programmieren.
 
kosmus schrieb:
An die einzelnen EditText kommst du mit der methode findViewById in einer Subklasse von Activity, aber das solltest wissen, denn du hast ja auch schon Textfelder ausgewertet um den Aufruf des AsyncTask zu programmieren.

Schon, aber wie komme ich aus der Activity an die Werte aus onPostExecute? Und was muss ich in der onPostExecute angeben um die Werte zu übergeben? Er nimmt nur ein nacktes "return"! Sobald ich versuche hinter dem return noch etwas anzugeben (String, servres, resulte, etc.) gibt er mir Fehlermeldungen aus. :confused2::confused2::confused2:
 
Mit den Observer. ;) Du passt die Methode handleLogin(Boolean loggedIn) an, in dem du den Typ änderst.

handleLogin(String result). In der Activity muss du die Methode auch ändern. Wenn du dann im Task die Methode observer.handleLogin(String result) ausrufst, übergibst die das Resultat den Observer, und damit der Activity. In der Activity wird jetzt die Methode handleLogin aufgerufen. Dieses Vorgehen hat ein Namen: Observer-Pattern. Beobachter (Entwurfsmuster) – Wikipedia

@kosmus Das meinte ich mit unnötig kompliziert. :(
 
  • Danke
Reaktionen: kosmus
Dank Dir vielmals, @markus.tullius, das war das fehlende Etwas... umgeändert von Boolean auf String hatte ich ja gestern schon aber ich wusste einfach nicht, wie hier die Werte hätte rausbekommen sollen. Aber klar, so im Nachhinein betrachtet - das loggedIn habe ich ja auch schon übernehmen können :angry: aber manchmal sieht man den Wald vor lauter Bäumen nicht mehr. Insofern kann ich auch die Hinweise von @kosmus durchaus nachvollziehen - je weniger Code um so übersichtlicher wird es sicherlich sein aber ich finde, Schleifen können einem sicherlich und gewiss einiges an Code ersparen aber wenn man dann nachher nur noch eine Schleife nach der anderen hat finde ich persönlich umständlicher den Code nachvollziehen zu können. Mit switch Case sehe ich genau an welcher Stelle was abgefragt und darauf hin veranlasst wird. Mag auch durchaus sein, dass das durchaus jetzt in meinen App- und Android-Anfängen so ist und ich irgendwann später - wenn ich da auch versierter drin bin - vielleicht auch mehr mit Schleifen arbeite. Aber auch bei meinen bisherigen "Arbeiten" habe ich aber mehr mit If/Else oder Select/Case (so heißen die Switch/Case-Anweisungen in VB) gearbeitet weil ich es dann auch für einen Außenstehenden als nachvollziehbarer empfinde.

Gruß
Markus
 
Ist schon alles richtig. Die Methode onPostExecute(Result result), ist genau dafür gedacht. Switch/Case ist genau der richtige Weg. Bei den Grundlagen (Switch/Case, Schleifen, if then) sind eigentlich alle Sprachen gleich. Da gilt für Java das gleiche wie für VB. Statt einem Array würde ich aber eine ArrayList verwenden. Es ist wesentlich eleganter, spart Platz und ist auch schneller.

Und dem Single-Responsiblity-Prinzip folgst du auch. Die Methode ist genau dafür da, nämlich das Ergebnis für die Activity vorbereiten und es dann übergeben. ;) Die Activity ist nur für die GUI zuständig, alles andere gehört da nicht hin.

Für deine Intention reicht die Lösung völlig, sie ist relativ einfach und schnell implementierbar. Du brauchst ja keine wirklich schnelle Verbindung, und muss keine großen Daten transportieren.
 
  • Danke
Reaktionen: MaThoPa1973
Zurück
Oben Unten