Parameterübergabe für MySQL-Datenbankabfrage

Code:
Log.d(string,string);
Damit kannst du LogCat Ausgaben machen.
Ich würde an deiner Stelle an verschiedenen Stellen mal Ausgaben machen um zu gucken, was übermittelt wird, was zurück kommt etc.
Connection hat hat außerdem eine Methode getResponseCode() damit kannst du gucken, ob du den Server überhaupt erreichst:
Code:
 conn.connect();
Log.d("Responsecode",Integer.toString(conn.getResponseCode());
Außerdem könntest du auch im Catch-Block noch einen Log Eintrag machen um zu gucken, ob dieser durchlaufen wird (also ein Fehler auftritt).
Vielleicht änderst du den Rückgabetyp des Asynctask von Boolean auf etwas, was mehr Informationen zulässt. Dann müsstest du natürlich auch das Interface und die Activity anpassen.
 
  • Danke
Reaktionen: MaThoPa1973
Danke.... habe mir nun ein paar LogCat-Ausgaben gesetzt:

conn.connect(); // Jetzt wird der HTTPRequest an den Server geschickt.
Log.d("Responsecode", Integer.toString(conn.getResponseCode()));
reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
String answer = reader.readLine();

Log.e(TAG, answer + " erhaltene Antwort");

if (answer.trim().equals("true")) {
result = true;
}

Responsecode ist: 200, also OK, soviel ich weiß.
Als "answer" erhalte ich jedoch immer Null, egal ob die Eingaben korrekt sind oder nicht. Also scheint ja mit meiner Rückgabe von meiner Seite was nicht zu passen, die sieht wie folgt aus:

$result = mysqli_query($con, $qry);

if (mysqli_num_rows($result) > 0) {
//return(mysqli_num_rows($result));
return true;
}
else {
return false;
}

Hierbei spielt es jedoch keine Rolle, ob ich hier mit "true" und "false" arbeite (natürlich auch in der App dann entsprechend "true" abfrage) oder mit den Ziffern "1" und "0".

Wo ist mein Denkfehler?
 
PHP ist leider nicht meine Stärke, was bekommst du denn im Browser angezeigt, wenn du die Seite mit dem Skript aufrufst? Müsstest du nicht irgendwo echo oder print haben, damit das Ergebnis auch beim Client ankommt?
 
In PHP ist Return eigentlich der Befehl zur Rückgabe eines Wertes, mit Echo erteilst Du den Befehl das Ergebnis auf dem Bildschirm anzuzeigen, was hier ja nicht erforderlich ist, da die Seite selber ja nicht zur Anzeige kommt. Wenn ich jedoch Echo mit einbringe bekomme ich in der Seitenanzeige das richtige Ergebnis angezeigt, deshalb verstehe ich ja nicht, warum er nur NULL empfängt. :(
 
du bekommst NULL weil die Serverantwort leer ist. Soweit ich das eben gelesen habe bewirkt return die Rückgabe an das Aufrufende php Modul. Das läuft aber alles serverseitig, während deine App ja offensichtlich auf dem Handy und nicht auf dem Server ausgeführt wird. Für deinen Server ist die Anfrage von deinem Handy wie jede andere HTTP Anfrage und wie bei jeder anderen Anfrage gibt der Server an den Client nur das zurück, was über print oder echo ausgegeben wird (so verstehe ich es zumindest, php ist wie gesagt nicht meine Stärke). Deine Webanwendung funktioniert wahrscheinlich, weil dein Login Skript von einer anderen php Seite aufgerufen wird, und diese andere Seite kann das return noch serverseitig auswerten.
Aber mal eine andere Frage, wenn du doch schon eine funktionierende Webanwendung hast und dich da auch besser auskennst als mit der Android App Entwicklung, wieso versuchst du dann nicht eine mobile freundliche Webseite zu erstellen, statt eine App zu programmieren?
 
@MaThoPa1973

Wie sieht den dein kompletter HTTPS - Response aus. In deinem Beispiel fehlt er komplett.

@Komus

kosmus schrieb:
Naja aufblähen... das ObserverInterface besteht aus 4 Zeilen Code (inklusive Package Angabe und allen Klammern). die Activity hätte dann zwei Wörter mehr (implements LoginObserver) und sonst wäre der Code genau so umfangreich, wie der den du gepostet hast (ich habe ihn nur in mehrere Methoden gegliedert). Dafür würde man sich im AsyncTask nicht auf eine Activity festlegen, und könnte ihn an verschiedenen stellen verwenden. Aber du hast recht, wenn man sich sicher ist, dass man das Ergebnis des AsyncTask immer mit einem Objekt der gleichen Klasse auswertet, könnte man auch auf das Interface verzichten.

Deine Ausführungen verstehe ich nicht. Oder die Docu von Google ist fehlerhaft. Soweit ich weiß, funktioniert der Asynctask nur im UI Thread. Sprich der Task ist so gebaut, das man direkt mit den UI Thread kommunizieren kann (Was die Klassen, in der eine Instanz von AsyncTask erzeugt werden kann, enorm einschränkt. In seinem Fall ist das eigentlich nur die Activity. Eine um einen Datentyp erweiterte Activity bleibt trotzdem eine Activity.)
Es sind nicht nur zwei Wörter, das Interface umfasst selber ein paar Zeilen Code, die Implementierung in der Activity und Asynctask benötigt auch Platz. Und das alles für Code, der keine Aufgabe erfüllt (außer vielleicht den Abstraktionsgrad des Programm zu erhöhen).

Die Methoden habe ich weggelassen, um den Programmcode übersichtlicher zu gestalten (KISS). Außerdem beendet meine Programmcode auch wieder die Internetverbindung (conn.disconnect()). Sollte man immer mache, schon um die Batterie des Device zu schonen, und den Traffic zu reduzieren (Jeder Admin wird sich darüber freuen).
 
Zuletzt bearbeitet:
@markus.tullius
das gerät jetzt etwas off Topic aber ich versuche es nochmal zu erklären. Ja das Interface besteht selbst auch aus Code. Vier Zeilen, wenn man die Packageangabe und die letzte schließende Klammer mitzählt. Effektiv wird ein Programmier aber nur für die eine Zeile Methodensignatur interessieren.
markus.tullius schrieb:
public void printFlag(boolean flag) {
((TextView)findViewById(R.id.text)).setText("FLAG: "+flag);
}
das ist doch praktisch schon die Implementierung, des von mir vorgeschlagenen Interfaces, nur das die Methode bei dir printFlag heißen würde und bei mir hieße sie handleLogin
Es ist auch nicht richtig, dass man aus einem AsyncTask heraus nur Activity Klassen benachrichtigen kann, wie das angehängte Beispiel beweist.
Was den disconnect angeht, hast du recht, den habe ich tatsächlich vergessen.
 

Anhänge

  • src.zip
    35,8 KB · Aufrufe: 78
@kosmus Das ist jetzt wirklich off topic.

Dein Code macht genau, dass was ich beschrieben habe. Du erzeugst erzeugst eine Instanz des AsyncTask (DummyTask) in der MainActivity. Alle Komponeten (also auch Activities) werden im UIThread instantiiert (außer du startest ein WorkerThread). Also läuft dein DummyTask - Objekt im Ui Thread.
Laut Google braucht der AsyncTask keine zusätzliche Händler um mit den UI Thread zu kommunizieren:
AsyncTask allows you to perform asynchronous work on your user interface. It performs the blocking operations in a worker thread and then publishes the results on the UI thread, without requiring you to handle threads and/or handlers yourself.
Processes and Threads | Android Developers

Deshalb brauchst du kein Observer für die Kommunikation. Es ist einfach nur Overhead, denn man normalerweise nicht braucht. Es ist keine falsche Lösung, sie ist nur unnötig kompliziert. Am besten nimmt man immer die einfachste Lösung (KISS - KISS-Prinzip – Wikipedia).
 
Ich glaube, ich weiß jetzt, warum ich immer einen Null-Wert vom Server als Antwort erhalte.

Meine Vermutung ist, dass der Connection-String nicht vollständig ist.
Nachfolgend der Code, der die Verbindung aufbaut:

Code:
try {
            HttpURLConnection conn = openHTTPConnection(params[0]);
            writer = writeDataToConnectionOutput(conn, params);
            conn.connect(); // Jetzt wird der HTTPRequest an den Server geschickt.
            Log.e(TAG, conn + " HTTPRequest an den Server schicken");

            Log.d("Responsecode", Integer.toString(conn.getResponseCode()));

            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
            String answer = reader.readLine();
            Log.d(reader.readLine().toString()," empfangener Reader");

            Log.e(TAG, answer + " Antwort von Homepage als String");

            if (answer.trim().equals("1")) {
                result = true;
            }

Über den writer wird zuvor der Link zusammengestellt, welcher versendet werden soll, der sich dann wie folgt aussehen sollte: http://www.meineWebseite/Unterverze...enutzername=ABC&Email=abc@abc.de&passwort=ABC

Das lasse ich mir - wie im nachfolgenden Code dargestellt, auch im LogCat eintragen:

Code:
writer = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8"));
        writer.write(postDaten.toString());
        Log.e(TAG, postDaten + " Link mit Parameterübergaben");
        return writer;

Im ersten Code-Ausschnitt lasse ich mir zudem dann den conn-String im LogCat eintragen, dieser sieht dann aber nur so aus: http://www.meineWebseite/Unterverzeichnis/Funktion.php. Für mein Verständnis, hat dieses zur Folge, dass an die PHP-Funktion die Abfrageparameter nicht übertragen werden, weshalb mir die Funktion immer einen Null-Wert zurückliefert. Oder sehe ich das falsch? Wie bekomme ich nun bei conn.connect() die Parameter mit in den zu sendenden Link?

Nur zur Info - mir geht es hier im Augenblick erst einmal nur um die grundlegende Funktion und das Verständnis. Selbstverständlich werden nachher in dieser Form keine Nutzerdaten versendet. Tatsächlich werden nachher nur noch 2 Werte, bestehend aus Zahlen und Buchstaben, versendet, wobei der erste Werte eine Art Schlüssel darstellt und der zweite Wert dann die erforderlichen Parameter in "verschlüsselter Form" enthält. Das PHP-Skript wird dann später erst noch eine Funktion aufrufen, welche aus diesen zwei Werten wieder die "Reinwerte" ermittelt ("Entschlüsselung").. Der Schlüssel besteht dabei aus einer 24-stelligen Zahlen-Buchstaben-Kombination und die Reinwerte aus einer 256-stelligen Zahlen-Buchstaben-Kombination.
 
Die Lösungen von markus.tullius und gehen davon aus, dass du die variablen aus $_POST ausliest, diese Werte tauchen in der URL nicht auf. Wenn du in deinem php Skript $_GET verwendest funktionieren unsere Lösungen nicht. In diesem Fall müsstest du die URL mit einem StringBuilder oder dem + Operator selbst zusammen bauen, bevor du new URL(url) bzw. new URL(param) aufrufst. Außerdem wäre conn.setRequestMethod("POST"); in conn.setRequestMethod("GET"); abzuändern.
Ich glaube aber nicht, dass es daran liegt, das die parameter nicht übergeben werden, denn dann müsste doch wenigstesn "FALSE" und nicht null zurück kommen.
@markus.tullius:
wir sind uns ja einigt, dass man im AsyncTask eine Referenz auf ein Objekt des UI-Threads braucht, damit dieser mit dem Ergebnis weiter arbeiten kann. Ich verwende hierfür ein Interface um die den Task und die Activity zu entkoppeln (Dependency-Inversion-Prinzip). Ich glaube beide Lösungen haben ihre Vor- und Nachteile und insgesamt ist es wohl Geschmackssache.
 
  • Danke
Reaktionen: MaThoPa1973
Einfach in conn.setRequestMethod("GET") abändern. Und den url - String einfach um die Parameter erweitern. Außerdem brauchst du keinen Writer.

@kosmus Genau darum geht es mir. Du wendest das Dependency-Inversion-Prinzip an, ohne das es eine Notwendigkeit dafür gibt. Dein LoginTask ist eine Lösung, die nur für eine speziellen Fall funktioniert (Es müssen per Post Werte für zwei Parameter ("user" und "passwort") übergeben werden, und er soll in einer Activity laufen). Und jetzt versucht du den Abstraktionsgrad zu erhöhen, in dem du ein "Observer" implementierst. Sprich du baust eine allgemeine Schnittstelle, die nur von einer Activity (MainActivity) benutzt wird.

In den Beispielen von Google ist der AsyncTask fast immer eine innere Klasse, in der die Methode protected void onPostExecute (Result result) überschrieben wird. Es ist eine einfache Lösung für Anfänger, die ohne Handler auskommt.
Deine Lösung ist wesentlich komplexer, die außerdem mehr Programmcode benötigt. Und das für ein Spezialfall. Warum einfach, wenn es kompliziert geht.
Und KISS sagt einfach nur, das man dies vermeiden soll.


 
  • Danke
Reaktionen: MaThoPa1973 und Jaiel
Hallo Leute,
vielen herzlichen Dank an @markus.tullius und @kosmus für Eure Unterstützung und hilfreichen Tipps. Die Nummer funktioniert nun und im Emulator wird dann auch die Serverantwort erhalten und verarbeitet, die Routinen arbeiten soweit jetzt einwandfrei. Nun habe ich die Möglichkeit alle weiteren Schritte durchzugehen und vor allem... ich steige da so langsam aber sicher durch.

Also nochmals, vielen lieben Dank - ohne Euch wäre ich wahrscheinlich noch verzweifelt. IHR SEID SPITZE!

Gruß
Markus
 
Hallo Leute,
nochmal eine kurze Verständnisfrage...

ich habe den
Code:
HttpURLConnection conn = openHTTPConnection(params[0] + "?action=" + params[1] + "&benutzername=" + params[2] + "&email=" +
params[3] + "&passwort=" + params[4]);
um den Parameter action erweitert um dann im PHP-Skritpt auf dem Server unterschiedliche Abfrage durchzuführen. Hier wird über eine switch-case-Funktion der Parameter params[1] abgefragt und ausgewertet und dann entsprechende Funktion aufgerufen. Auch das funktioniert insoweit.

Nun sieht es aber so aus, dass ich in Abhängigkeit der erforderlichen Funktion eine unterschiedliche Anzahl an Parametern übergeben müsste.

Kann ich dass hier auch über eine select-case- oder if-elseif-Funktion in Android zuvor abfragen und den
Code:
XXX =params[0] + "?action=" + params[1] + "&benutzername=" ... // mit unterschiedlicher Parameteranzahlübergabe;
dann individuell festlegen und dann über
Code:
HttpURLConnection conn = opernHTTPConnection(XXX)
übergeben? Und wenn ja, als was genau muss ich dann XXX definieren und anlegen? Als String? Als...???

Gruß
Markus
 
Wenn ich davon ausgehen darf dass es mehr als zwei verschiedene Actions gibt, würde ich weder einen Switch noch eine If Abfrage empfehlen. Beide beide führen zu relativ viel Code und sind aufwendig in der Wartung und schlecht erweiterbar. Eine Simple Lösung wäre es den String vor dem Aufruf des AsyncTask zusammen zubauen, denn die Klasse, die den Task aufruft weiß wahrscheinlich genau welche Action sie möchte. Die andere Möglichkeit wäre eine for Schleife. Dann müsstest du in den params aber nicht nur den Wert hinter dem Gleichheitszeichen, sondern auch den Wert vor dem Gleichheitszeichen mitgeben. Die For Schleife könnte so aussehen (Vorsicht Code habe ich nicht getestet):
Code:
StringBuilder sb = new StringBuilder(params[0] + "?");

for (int i = 1; i < params.length; i = i + 2) {
sb.append(params[i]);
sb.append("=");
sb.append(params[i+1]);
if (i+2 < params.lengh) {
   sb.append("&");
}
}
 
Hallo @kosmus und danke für den Hinweis mit dem Stringbuilder.

Habe im Augenblick zwar schon für den Aufruf eine switch-case-Variante erstellt und er zeigt mir hier insoweit auch erst einmal keinen Fehler an, aber im Augenblick stellt sich mir hier eine ganz andere Herausforderung....

Du erinnerst Dich an die Anfänge dieses Posts? Da war ja nur die Rede davon, dass es als Ergebnis eine 1 oder 0 auszuwerten gab. Aber bei den weiteren Abfragen muss ich mir ja auch die Werte des jeweils erforderlichen Datensatzes ausgeben lassen und die bekomme ich bei der bisherigen Vorgehensweise nicht aus dem AsyncTask an das UI übergeben, weil im AsyncTask ja alles auf Boolean ausgelegt ist - derLoginObserver greift ja hier auf das onPostExecute zurück. Soweit ich das jetzt schon richtig recherchiert habe müsste ich hier dann aber die Werte abgreifen und an das UI übergeben.... habe im Augenblick aber noch keinen Plan wie... zumal ja auch hier die Anzahl der zu übergebenden Werte je nach erforderlicher Abfrage variiert.... da meint man die eine "Baustelle" abgeschlossen zu haben, da tun sich dann auch gleich schon die nächsten auf :(

Gruß
Markus
 
In meinem LoginTask (würde ich umbenennen) findest du am Anfang der Klasse drei Generics
Code:
extends AsyncTask<String, Void, Boolean>
Der erste gibt an welchen Datentyp die Parameter der doInBackground Methode haben hier String, das würde ich auch beibehalten. Der Zweite ist für onProgressUpdate, da du diese Methode nicht benutzt, kannst du erstmal Void lassen.
Die letzte ist der Rückgabewert der doInBackground bzw. der parameter der onPostExecute. Zurzeit steht dort Boolean, dass könntest du in String ändern und dann einfach die Serverantwort zurückgeben. Die Auswertung solltest du dann in der handleLogin (würde ich dann auch umbenennen) Methode der aufrufenden Klasse machen.

p. s.
ich würde mir das mit dem Switch wirklich noch mal überlegen, jedes mal wenn du eine neue Funktion hinzufügst musst du wieder die Klasse des Task anpassen, mit den beiden Vorschlägen von mir, müsstest du immer nur die aufrufende Klasse ändern. Diese wirst du bei neuen Funktionen sowieso wegen neuer UI Elemente ändern oder neu schreiben. Aber so bleibt wenigstens der Task unverändert und es können sich keine Fehler mehr einschleichen.
 
OK, habe jetzt überall an den entsprechenden Stellen das Booelan durch String ausgetauscht und er zeigt mir den Quellcode als solches erstmal als fehlerfrei an. Aber wie übertrage ich dann bei onPostExecute den String, der ja dann aus mehreren Werten (ein Datensatz mit mehreren darin enthaltenen Werten) auf die einzelnen EditText-Elemente im UI?

Gruß
Markus
 
Naja du wirst deine Server Antwort so aufbauen müssen, dass du die Strings auch auswerten kannst. Am sinnvollsten wäre es wenn deine Antwort in JSON daher kommen würde. Möglich wäre auch XML, die Antworten wären dann Traffic intensiver und XML Parsing kann auch aufwendig werden, dafür ist es leichter zu debuggen, weil man es leichter lesen kann. Du könntest auch ganz einfach CSV verwenden und dann die split Methode auf dem String aufrufen, das ist die einfachste Lösung, aber sehr fehleranfällig. Ich würde JSON empfehlen, da finden sich hier im Forum auch viele Beispiele zu.
 
Ist JSON oder XML für eine Zeile mit maximal 8 Werten als Rückgabe nicht ein bisschen viel Aufwand? Es geht ja nicht darum hier weiß Gott wie viele Datenbanksätze auf's Endgerät zu bringen und ich will den Datentransfer möglichst gering halten (heut zu Tage hat zwar fast jeder eine Datenflat, aber zum Einen ist diese ja immer nur auf ein bestimmtes Volumen begrenzt und dann geht es nur noch langsam weiter, zum Anderen muss ich auch davon ausgehen, dass - wenn es wirklich dazu kommen sollte, dass ich mal fertig werde - die App von meinen Nutzern auch bei Auslandsaufenthalten zum Einsatz kommt und da ist es dann je nach Vertrag und Tarif wieder vorbei mit Datenflat. Insofern will ich eine möglichst schlanke Datenübertragung haben.

Kurz zum Verständnis meiner Anwendung: Der Nutzer misst seinen Blutgerinnungsfaktor (INR) mit seinem von der Krankenkasse überlassenen Gerinnungsmonitor, trägt den gemessenen Wert dann mit aktuellem Datum in die App ein. Die sendet dann den gemessenen Wert an den Server, der dann die erforderliche Tablettendosierung (Marcumar, Phenprocoumon, Falithron, o.ä.) ermittelt und aufgesplittet für die folgenden 7 Tage, sowie die Gesamtwochendosis, zurück ans Endgerät sendet und dort anzeigt. Parallel werden die Daten in die Datenbank auf dem Server gespeichert, da diese zur Berechnung beim nächsten mal mit herangezogen werden.

Datentransfer erfolgt also in den Activitys wie folgt:
Anmeldung: Benutzername, Email und Kennwort an Server senden und als Rückmeldung 1 oder 0. (3 Werte zum Server, 1 Wert an die App)

Stammdaten: Nutzername, Größe, Gewicht, Amputationskorrekturwert vom Server an App und bei Aktualisierung auch an den Server. (4 Werte an den Server, 3 Werte an die App)

Therapeutische Daten: Nutzername, unterer und oberer Grenzwert des festgelegten Zielbereiches und durchschnittliche Wochendosis vom Server an das Endgerät und zurück bei Aktualisierung. (4 Werte an den Server, 3 Werte an die App)

Messung durchführen: Nutzername, Datum und aktuell gemessener INR an den Server und die Dosierungswerte für eine Woche je Tag und die Wochengesamtdosis (könnte ggf. auch dann auf dem Endgerät ausgerechnet werden), also 7 + (1) an das Endgerät. (3 Werte an den Server, 7 (8) Werte an die App)

Abgesehen vom Nutzername (Email-Adresse und Kennwort bei der Authentifizierung) handelt es sich bei allen anderen Werten um Zahlen. Du siehst, dass der Datentransfer letzten Endes sehr schmal gehalten ist. Die Werte an den Server zu bekommen stellt auch nicht das Problem dar... nur eben die Rückmeldung

Damit der Nutzer die Anmeldeinformationen nicht jedes Mal neu eingeben muss hat er die Möglichkeit in der betreffenden Activity eine Checkbox zu aktivieren worauf hin die Anmeldedaten in einer lokalen Datei gespeichert werden. Wenn die Activity dann aufgerufen wird um sich anzumelden werden die Daten dann, bei Vorhandensein der betreffenden Datei wie folgt ausgelesen:

Code:
File datei = new File(getFilesDir(), "logdat.txt");
FileReader reader = new FileReader(datei);
BufferedReader eingabeDatei = new BufferedReader(reader);
String Nutzer = eingabeDatei.readLine();
String Email = eingabeDatei.readLine();
String Kennwort = eingabeDatei.readLine();

Besteht denn die Möglichkeit, dass wenn ich die Rückmeldung vom Server ebenso "verpacke" - also jeden Wert dann in eine separate Zeile packe - die dann im onPostExecute ähnlich wie die Textdatei auszulesen und die Werte dann in der betreffenden Activity in die jeweiligen Edit-Text-Elemente zu schreiben?

Gruß
Markus
 
Zuletzt bearbeitet:
Guten Morgen,
also, ich habe nun folgendes gemacht....

1. Im PHP-Script wird die Antwort mehrzeilig gesendet, jeder Wert in einer Zeile.
2. DoInBackground durchläuft die Antwort zeilenweise um dann die Werte im result-String für die Returnanweisung durch Semikolon getrennt einzeilig zusammen zu fassen... sieht dann so aus:
Code:
switch (params[1]) {
case "LogIn":
code = reader.readLine();
status = reader.readLine();

result = code + ";" + status;
break;

case "SDChk":
code = reader.readLine();
groesse = reader.readLine();
gewicht = reader.readLine();
ablation = reader.readLine();

result = code + ";" + groesse + ";" + gewicht + ";" + ablation;
break; // und so weiter um die weiteren Modelle aufzubauen

}

return result; // Übergabe des result-Strings an onPostExecute

Hinter code versteckt sich der selbe Wert, wie er auch in params[1] über den ich die switch/case-Funktion abgefragt wird.

3. Im onPostExecute zerlege ich diesen String dann wieder und führe eine weitere switch/case-Funktion aus um die einzelnen Werte in ein Array-String zu schreiben, was dann so aussieht:

Code:
protected void onPostExecute(String result) {
String[] servres = result.split(";");

switch (servres[0]) {

case "LogIn":
if (Boolean.valueOf((servres[1]).equals("1"))) {
result = "true";
}
else {
result = "false";
}
observer.handleLogin(result);
break;

case "SDChk":
String groesse = servres[1];
String gewicht = servres[2];
String ablation = servres[3];

break; // und so weiter für die weiteren Modelle
}

}

Ich hatte mir das auch über Einträge im LogCat insoweit alles anzeigen lassen und bekomme die Werte auch wieder alle so angezeigt wie ich sie benötige... aber eben aktuell nur im LogCat. Wie kann ich jetzt die im Array liegenden Werte auf die einzelnen EditText-Felder des Ui übergeben??? Weder bekomme ich es hin von hier aus die EditText-Felder anzusprechen und zu belegen, noch von der UI aus auf das Array zuzugreifen. :(

Es mag durchaus sein, dass diese Vorgehensweise ungewöhnlich aussehen mag, aber wie gesagt, ist es mein Ziel hier erst einmal ein grundsätzliches Verständnis für die Abläufe und die Wege der einzelnen Werte nachvollziehen zu können. Darüber hinaus sehe ich hier - für mich persönlich - eine einfachere Methode einzelne Funktionen zu ändern oder zu ergänzen. Und wenn irgendwo ein Fehler in einer Funktion ist, dann bezieht der sich eben auch nur auf die eine betreffende Funktion, auch wenn ich das dann an mehreren Stellen entsprechend prüfen muss - aber es ist dann entsprechend nachvollziehbar... meiner Meinung nach.

Gruß
Markus
 

Ähnliche Themen

netfreak
  • netfreak
Antworten
10
Aufrufe
474
netfreak
netfreak
5
Antworten
0
Aufrufe
1.164
586920
5
Y
Antworten
4
Aufrufe
1.234
swa00
swa00
Zurück
Oben Unten