"Else" wird ausgeführt, obwohl IF in Kraft treten soll

  • Antworten:12
A G
  • Forum-Beiträge: 31

11.07.2012, 13:10:45 via Website

Hi!
1public void SpeicherSongKlick (View v) {
2
3 String interpret_ = String.valueOf(Interpret.getText());
4 String titel_ = String.valueOf(Titel.getText());
5 String album_ = String.valueOf(Album.getText());
6 String albumcover_ = String.valueOf(Albumcover.getText());
7 String uploader_ = String.valueOf(Uploader.getText());
8
9 if (interpret_== null || titel_ == null || album_ == null || uploader_ == null) {
10 AlertDialog.Builder builder = new AlertDialog.Builder(this);
11 builder.setTitle("Fehler:");
12 builder.setMessage("Fülle alle Felder aus!");
13 builder.setPositiveButton("OK",
14 new DialogInterface.OnClickListener() {
15 public void onClick(DialogInterface dialog, int id) {
16 //nichts weiter tun;Dialog schließen
17 dialog.dismiss();
18 }
19 });
20
21 builder.setCancelable(false); //nicht schließen mit ZURÜCK-Button
22 builder.show();
23
24
25 }
26 else {
27 HttpClient httpClient = new DefaultHttpClient();
28 HttpPost httpPost = new HttpPost("http://www.url.de/datei.php");
29
30 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
31 nameValuePairs.add(new BasicNameValuePair("interpret", interpret_));
32 nameValuePairs.add(new BasicNameValuePair("titel", titel_));
33 nameValuePairs.add(new BasicNameValuePair("album", album_));
34 nameValuePairs.add(new BasicNameValuePair("albumcover", albumcover_));
35 nameValuePairs.add(new BasicNameValuePair("uploader", uploader_));
36
37 try {
38 httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
39 HttpResponse response = httpClient.execute(httpPost);
40 response.getStatusLine().getStatusCode();
41
42 Toast.makeText(getApplicationContext(), "Gespeichert!",
43 Toast.LENGTH_SHORT).show();
44 ChartsActivity = new Intent(this, ChartsActivity.class);
45 startActivity(ChartsActivity);
46
47 } catch (Exception e) {
48 Toast.makeText(getApplicationContext(),"Fehlgeschlagen",
49 Toast.LENGTH_SHORT).show();
50 }
51 }
52 }

Das wäre die Methode für einen Button. Er soll in der If-abfrage überprüfen, ob eines der EditText-Felder leer ist, wenn das der Fall ist, soll ein "Alert" erscheinen. Leider macht er das nicht. Wenn ein Feld leer ist, führt er noch den Else-Teil aus und übergibt die Werte noch und blendet den "Gespeichert" Toast ein.

Antworten
Markus B.
  • Forum-Beiträge: 636

11.07.2012, 14:28:49 via Website

Hi,
dann schau dir doch mal den Wert von z.B. interpret_ an. Dann wirst du sehen was du dir fälschlicherweise Denkst :)

Gruß,
Markus

Antworten
André
  • Forum-Beiträge: 77

11.07.2012, 15:00:15 via Website

Oder auch, aus der Doku für String.valueOf(Object):

Converts the specified object to its string representation. If the object is null return the string "null", otherwise use toString() to get the string representation.

Die Variablen können also nie null sein.

Außerdem liefert TextView.getText() ebenfalls nie null zurück, sondern für ein leeres Feld die leere CharSequence "".

Antworten
A G
  • Forum-Beiträge: 31

11.07.2012, 20:27:55 via Website

Ja, ich hatte allerdings auch schon "" ausprobiert; auch mit beiden (also in Kombination). War leider auch nicht richtig.

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

11.07.2012, 20:58:09 via Website

Was ist das denn?

1Interpret.getText()

Basierend auf die Schreibweise unterstelle ich mal das Interpret eine Klasse und getText() eine statische Methode in dieser Klasse ist? Ist das korrekt? Wenn ja, was liefert denn getText(), einen Text? Wenn ja, wieso nutzt Du String.valueOf() gegen den Text?

Dir fehlen rudimentäre Kenntnisse sowohl von Programmierung im Allgemeinen, als auch Java/Android im Speziellen.

Als Android Buch kann ich Dir z.B. Android 2.0 empfehlen - als Samples zum Rumspielen die unglaublich vielen Android Samples von Google selbst.

Antworten
André
  • Forum-Beiträge: 77

11.07.2012, 21:01:21 via Website

Ich würde mal davon ausgehen, dass er einfach die Variablen für seine TextViews groß geschrieben hat, auch wenn man das eigentlich nicht macht.
String.valueOf() wird benutzt, weil TextView.getText() eine CharSequence zurückliefert.

Das ist schon alles in Ordnung so.

Antworten
A G
  • Forum-Beiträge: 31

11.07.2012, 21:07:22 via Website

Ja es sind Variablen. Warum ich sie hier großgeschrieben habe weiß ich nicht. Vermutlich um sie von XML zu unterscheiden. Habe sie jetzt aber klein geschrieben.

Aber wie gesagt trotzdem scheints auch mit "" nicht zu funktionieren.

Antworten
André
  • Forum-Beiträge: 77

11.07.2012, 21:10:32 via Website

A G
Aber wie gesagt trotzdem scheints auch mit "" nicht zu funktionieren.

Da müsstest du jetzt schon konkreter werden. Mit "" funktioniert es, die Frage ist, wo dein Fehler ist.

Was steht denn in den Variablen wenn du sie mit "" vergleichst? Und wie vergleichst du sie mit ""? Bzw. du kannst einfach String.length() benutzen, ein Vergleich ist da unsinnig.

— geändert am 11.07.2012, 21:11:36

Antworten
A G
  • Forum-Beiträge: 31

11.07.2012, 21:27:09 via Website

Danke mit length() == 0 ging es. Ich hab mir per Toast ausgeben lassen, was drinsteht, wenn er leer ist. Der Toast war auch leer (wen wunderts). Nur warum ging es mit interpret == "" nicht?...

Antworten
André
  • Forum-Beiträge: 77

11.07.2012, 21:31:13 via Website

Weil man Strings nicht mit == vergleichen kann... vielleicht wäre eine grundlegende Java-Einführung doch nicht so verkehrt.

(string == "") wird immer false zurückgeben, weil es nicht dasselbe Objekt auf beiden Seiten ist. Einen String-Vergleich musst du mit String.equals() machen, also in dem Beispiel (string.equals("")).

Richard R.

Antworten
Richard R.
  • Forum-Beiträge: 90

19.07.2012, 22:13:27 via Website

A G
Danke mit length() == 0 ging es. Ich hab mir per Toast ausgeben lassen, was drinsteht, wenn er leer ist. Der Toast war auch leer (wen wunderts). Nur warum ging es mit interpret == "" nicht?...

LOL

Antworten
Markus B.
  • Forum-Beiträge: 636

19.07.2012, 22:20:12 via Website

Richard R.
A G
Danke mit length() == 0 ging es. Ich hab mir per Toast ausgeben lassen, was drinsteht, wenn er leer ist. Der Toast war auch leer (wen wunderts). Nur warum ging es mit interpret == "" nicht?...

LOL

Dafür gehört dein Account einfach gelöscht ...
Alte Threads mit unqualifizierten Kommentaren wiederbeleben, Hut ab !

Gruß,
Markus

Antworten