# Volley String Response gibt falchen if aus



## wer112 (31. Aug 2022)

Sorry Leute, das ist mir noch nie passiert. Ich rufe eine Webseite auf und die gibt mir ein Echo. Dieser Echo wird ja vom Response der Volley Aufgabe empfangen.
Ich habe mit einem einfachem Log, den Response ausgegeben. Dieser kommt richtig an, aber die Meldung in der If Anweißung ist falsch.
So mache ich das immer und hat bisher immer geklappt. Könnt ihr mir bitte weiterhelfen, da es mir schon seit Tagen Kopfschmerzen bereitet.
Oder Android Studo hast mich immer mehr, erst kein Zugriff auf Assets und jetzt das....

Mein Code:


```
@Override
            public void onResponse(String response) {

                Log.e("AnonymerModus", "Response: " + response.toString());

                if (response.equals("Ue")){
                    Log.e("AnonymerModus", "Erfolgreich");
                }else{
                    Log.e("AnonymerModus", "Nicht erfolgreich..");
                }
```

Und Laut Logcat:


```
2022-08-31 11:12:33.382 7314-7314/----- E/AnonymerModus: Response:
    Ue
2022-08-31 11:12:33.382 7314-7314/---- E/AnonymerModus: Nicht erfolgreich..
```

Auf allen anderen Fragmente und so weiter geht das? Habe auch mal getestet mit == , aber hat auch njxs gebracht. Bin also weiterhin bei dem equals geblieben...

Ich hoffe, ihr habt eine Ahnung, wiso das hier net klappt, aber überall anders schon...

Ich bedanke mich im Vorraus!


----------



## fhoffmann (31. Aug 2022)

Wenn dein Logfile nicht täuscht, enthält der response einen Zeilenumbruch.


----------



## Robert Zenz (31. Aug 2022)

Was ich sehr gerne mache, ist ausgegebene Werte mit "<>" zu umgeben. Dann sieht man auch Weisszeichen und Abstaende sehr leicht welche im Moment vorkommen:


```
Log.e("AnonymerModus", "Response: <" + response.toString() + ">");
```

Und vermutlich wird deine Ausgabe, wie @fhoffmann schon sagte, dann so aussehen:


```
2022-08-31 11:12:33.382 7314-7314/----- E/AnonymerModus: Response: <
    Ue>
```


----------



## wer112 (31. Aug 2022)

fhoffmann hat gesagt.:


> Wenn dein Logfile nicht täuscht, enthält der response einen Zeilenumbruch.


Das seltsame ist, dass ich kein Zeilen umbruch in PHP habe, und die anderen Strings Response klappen ja auf alle anderen Seiten und Fragmente.

PHP Ausgabe:


```
echo "Ue";

    }else{
        echo "Es ist leer.";
    }
  



}else{


    echo "Du bist ausgeloggt.";
  
}

?>
```


----------



## wer112 (31. Aug 2022)

Robert Zenz hat gesagt.:


> Was ich sehr gerne mache, ist ausgegebene Werte mit "<>" zu umgeben. Dann sieht man auch Weisszeichen und Abstaende sehr leicht welche im Moment vorkommen:
> 
> 
> ```
> ...


Habe das jetz so gemacht.


Robert Zenz hat gesagt.:


> Und vermutlich wird deine Ausgabe, wie @fhoffmann schon sagte, dann so aussehen:
> 
> 
> ```
> ...



Es kommt wie du hervorgesehen hast:

```
2022-08-31 13:30:36.428 15322-15322/--- E/AnonymerModus: Response: <
    Ue>
2022-08-31 13:30:36.428 15322-15322/---- E/AnonymerModus: Nicht erfolgreich..
```

Aber ich habe nixs anders gemacht, also auf jeder Seite und Fragment. Nur hier ist das so. Habe in mein PHP Seite reingeschaut und da war kein <br>.

Hier der Echo Auszug:


```
echo "Ue"; //Ursprüngliche Ausgabe....

    }else{
        echo "Es ist leer.";
    }
  


}else{


    echo "Du bist ausgeloggt.";
  
}

?>
```


----------



## LimDul (31. Aug 2022)

Evtl. vor dem öffenden <? Tag eine Leerzeile?


----------



## KonradN (31. Aug 2022)

Meine pers. Meinung ist bei sowas, dass ich da doch sehr gerne auf Standards aufsetze. Und das wären dann WebServices, die halt ein klares, sauberes Ergebnis liefern und nicht einfach "irgend einen Text". Dann hätte man sowas halt XML oder JSON kodiert. Die Möglichkeiten von PHP kenne ich nicht, aber REST Services sollen damit doch auch gehen also wird es da Libraries geben ...


Aber egal, wie dem auch immer sei: Whitespace davor oder danach interessieren Dich offensichtlich nicht. Warum rufst Du also nicht auf dem respones einfach einmal trim() auf? Dann hast Du also etwas wie response.trim(); 

Und response ist doch bereits ein String - wieso rufst Du da noch toString() auf?


----------



## wer112 (31. Aug 2022)

LimDul hat gesagt.:


> Evtl. vor dem öffenden <? Tag eine Leerzeile?


1. Für ein Echo ist es egal, da ich ja außerdem bei den anderen PHP Seiten natührlich leerzeichen und Umbrüche habe.

2. der Anfang:

```
<?php
session_start();
```

3. das Echo befindet sich in ne if Abfrage.

ich probiere es mal zu trimmen, aber das habe ich sonst nirgendswo gemacht und ist auch keine dauerlösung, wenn es klappen sollte...


----------



## wer112 (31. Aug 2022)

KonradN hat gesagt.:


> Meine pers. Meinung ist bei sowas, dass ich da doch sehr gerne auf Standards aufsetze. Und das wären dann WebServices, die halt ein klares, sauberes Ergebnis liefern und nicht einfach "irgend einen Text". Dann hätte man sowas halt XML oder JSON kodiert. Die Möglichkeiten von PHP kenne ich nicht, aber REST Services sollen damit doch auch gehen also wird es da Libraries geben ..


Ein Webservice wäre bestimmt irgendwann gut. Als Anfänger weiß ich nicht wo ich anfangen soll und wie ich es umsetzen muss...

Ein Json Response benutze ich, wenn ich mehrere Daten abrufen muss, dann ziehe ich es im Try raus. Aber wenn nur "Ok" brauche, dann verpacke ich es nicht in ein Json, was man aber machen kann z.B. {"Ergebniss":"Okay"} bzw.  {"Ergebniss":"False"}

XML kann ich ja nicht und weiß nicht ob Volley das kann. Und okHttp kein Plan, ob es das kann, aber dann müsste ich das lernen. da finde ich Volley einfacher und habe dies bereits überall angewendet.

Das mit dem Response Empfang hat bisher ja überall geklappt Auf jede Seite und Fragmente, nur jetzt nicht und ich habe ja nixs wirklich am Codes verändert....


KonradN hat gesagt.:


> .
> 
> 
> Aber egal, wie dem auch immer sei: Whitespace davor oder danach interessieren Dich offensichtlich nicht. Warum rufst Du also nicht auf dem respones einfach einmal trim() auf? Dann hast Du also etwas wie response.trim();



Habe es mal mit trim auf Java Seite gemacht und musste erstaml umschreiben den String.
Aslo sieht es nun so aus:


```
@Override
            public void onResponse(String response) {

                String responseString = response.trim();

                Log.e("AnonymerModus", "Response: <" + responseString + ">");

                if (response.equals("Ue")){
                    Log.e("AnonymerModus", "Erfolgreich");
                }else{
                    Log.e("AnonymerModus", "Nicht erfolgreich..");
                }
```

Aber jetzt kommt ue normal an:


```
2022-08-31 13:44:13.198 17095-17095/---- E/AnonymerModus: Response: <Ue>
2022-08-31 13:44:13.199 17095-17095/---- E/AnonymerModus: Nicht erfolgreich..
```

Trotzdem ist es nicht erfolgreich.


KonradN hat gesagt.:


> Und response ist doch bereits ein String - wieso rufst Du da noch toString() auf?



Das frage ich mich gerade auch...


----------



## KonradN (31. Aug 2022)

Du hast in dem if noch immer response und nicht den responseString.


----------



## Jw456 (31. Aug 2022)

QUOTE="wer112, post: 1322680, member: 63283"]
Für ein Echo ist es egal, da ich ja außerdem bei den anderen PHP Seiten natührlich leerzeichen und Umbrüche habe.
[/QUOTE]
Für das Echo ja.

Aber was machst du noch in php. Wird das php von einem anderen Script aufgerufen? Ist da vielleicht der zeilenumbruch. 
Oder ist er gar im Body Teil des HTML. 
Also auserhalb des php.


----------



## wer112 (31. Aug 2022)

KonradN hat gesagt.:


> Du hast in dem if noch immer response und nicht den responseString.


Dann geht es, aber wenn ich auf PHP es trimme, dann gehts nicht.

Habe das jetzt sogemacht den responseString verwendet und es geht.

Die frage bleibt im Raum, Wiso das überall geklappt hat, nur nicht hier. Ich musste ja nie den response zusätzlich trimmen und habe ja keine Leerzeichen im Namen.


----------



## wer112 (31. Aug 2022)

Jw456 hat gesagt.:


> QUOTE="wer112, post: 1322680, member: 63283"]
> Für ein Echo ist es egal, da ich ja außerdem bei den anderen PHP Seiten natührlich leerzeichen und Umbrüche habe.


Für das Echo ja.

Aber was machsr du noch in php. Wird das php von einem anderen Script aufgerufen? Ist da vielleicht der zeilenumbruch.
Oder ist er gar im Body Teil des HTML.
Also auserhalb des php.
[/QUOTE]


```
<?php
session_start();

include_once("---");
require "datenbank";


$kundennummer = trim($_SESSION['---']);
$angemeldet = trim($_SESSION['---']);

$modus = $_POST['---'];


if($angemeldet == 1){

   if(!empty($modus)){
      
  

       $statment = $con->prepare("UPDATE --- SET ----- = :++, ------ = '2'   WHERE -------- = :kundennummer");
       $statment->execute(array(":++" => $modus,  ":--------" => $kundennummer));

      

        require "--.php";
        require "---.php";
    
        echo "Ue";

    }else{
        echo "Es ist leer.";
    }
  



}else{


    echo "Du bist ausgeloggt.";
  
}

?>
```


----------



## KonradN (31. Aug 2022)

Irgend wo schreibst Du eine Leerzeile. Bei der ganzen Verarbeitung des Requests muss das passieren. Da wir den Code nicht kennen, können wir nichts genaueres sagen. Eine Möglichkeit wurde ja genannt und die hast Du bereits geprüft.



wer112 hat gesagt.:


> Dann geht es, aber wenn ich auf PHP es trimme, dann gehts nicht.


In PHP hilft kein Trimmen. Da ist ja bereits vorher irgendwann der Zeilenumbruch geschrieben worden. Und damit ist der sozusagen bereits geschrieben worden.


----------



## KonradN (31. Aug 2022)

Dann prüf einmal, ob die ganzen Dinge, die Du mit require einbindest, nicht evtl. eine Leerzeile schreiben.


----------



## LimDul (31. Aug 2022)

wer112 hat gesagt.:


> 1. Für ein Echo ist es egal, da ich ja außerdem bei den anderen PHP Seiten natührlich leerzeichen und Umbrüche habe.


Nein, wenn das öffnende <? bzw. <?php nicht in der ersten Zeile der Datei ist, dann wird *immer* alles, was davor ist, ausgegeben in der Response.


----------



## wer112 (31. Aug 2022)

LimDul hat gesagt.:


> Nein, wenn das öffnende <? bzw. <?php nicht in der ersten Zeile der Datei ist, dann wird *immer* alles, was davor ist, ausgegeben in der Response.


<?php ist auf Zeile 1


----------



## LimDul (31. Aug 2022)

In *allen* Dateien, die per require eingebunden werden?


----------



## Jw456 (31. Aug 2022)

require "--.php";
 require "---.php";

Was machst du hier in den beiden Scripten. Wird das der Umbruch gemacht?

Ps LimDul  war etwas schneller

require "datenbank";
Gehört auch dazu


----------



## KonradN (31. Aug 2022)

Jw456 hat gesagt.:


> Ps LimDul war etwas schneller


Nicht, dass es in #15 nicht auch schon gesagt wurde ... und es gibt ja auch noch ein weiteres require


----------



## Jw456 (31. Aug 2022)

KonradN hat gesagt.:


> Nicht, dass es in #15 nicht auch schon gesagt wurde ... und es gibt ja auch noch ein weiteres require


was soll das ?


----------



## KonradN (31. Aug 2022)

Jw456 hat gesagt.:


> was soll das ?


Sollen wir das Thema erneut durchkauen? Soll man Dich immer fragen "was soll das", wenn du nur Dinge wiederholst, die schon längst gesagt wurden? Ich will es nicht erneut durchkauen zumal dies ja ganz offensichtlich nichts bringt.


----------



## Jw456 (31. Aug 2022)

KonradN hat gesagt.:


> Sollen wir das Thema erneut durchkauen? Soll man Dich immer fragen "was soll das", wenn du nur Dinge wiederholst, die schon längst gesagt wurden? Ich will es nicht erneut durchkauen zumal dies ja ganz offensichtlich nichts bringt.


Mir echt zu dumm darauf eine Antwort zu geben.


----------



## wer112 (1. Sep 2022)

Jw456 hat gesagt.:


> require "--.php";
> require "---.php";
> 
> Was machst du hier in den beiden Scripten. Wird das der Umbruch gemacht?


Ich habe in den Require gekuckt, aber kein Echo mit Zeilen umbruch. Eigentlich gibt es keine Echos drinnen... 

In der 1. Ist die Datenbank Verbindung:


```
<?php
$dsn='mysql:dbname=---;host=---';
$dbuser = '---';
$dbpass = '----';



try{
    $con = new PDO($dsn, $dbuser, $dbpass);
    $con->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);

 //   echo "Verbindung erfolgreich aufgebaut!";

}catch(PDOException $e){

    echo "Verbindung zur Datenbank fehlgeschlagen.<br>Fehler: " . $e->getMessage();

}


//Wer112
?>
```

In der 2. require ist ein Generator:


```
<?php
session_start();

include_once(---);
require "datenbank";


$kundennummer = trim($_SESSION[---]);
$email = trim($_SESSION['---']);
$datum = date("-----");

$time = time() * 15432 * 65464346526205904465066565644364;


$hashcode = $kundennummer . $email . $datum . $time;

$ksd1 = password_hash($hashcode, PASSWORD_DEFAULT);
$ksd2 = password_hash($hashcode, PASSWORD_BCRYPT);
$ksd3 = password_hash($ksd1, PASSWORD_BCRYPT);

$verschluesselung = $ksd1 . $ksd2 . $ksd3 . $ksd4;





?>
```

Dort ist auch kein Echo..

Und das Dritte ist PHPMailer und da sind Zeilenumbrüche in den Strings, aber es gibt kein Echo aus, nur bei Fehler:


```
}catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}



?>
```

Da wäre nur das Echo, wenn die Email nicht versendet wurden wäre, aber dann kämme ja dieser Satz mit rein. 
Und die Zeilenumbrüche sind ja nur in den Strings und die werden nicht ausgegeben, sondern gesendet.





Jw456 hat gesagt.:


> Ps LimDul  war etwas schneller
> 
> require "datenbank";
> Gehört auch dazu



Wie gesagt, ich habe genauso gemacht wie auf jeder Activity und Fragment und hat bisher immer geklappt. Habe auch nachdem Ihr gesagt hattet, das Zeilenumbrüche oder Leerzeichen in PHP sein müsse, extra nachgeschaut, aber keine gefunden. Habe alle require offen gelegt. (PHPMailer nur den einzigen echo...)


----------



## wer112 (1. Sep 2022)

KonradN hat gesagt.:


> Nicht, dass es in #15 nicht auch schon gesagt wurde ... und es gibt ja auch noch ein weiteres require


Da hast du recht, leider habe ich dies irgendwie nich war bewusst wargenommen, da ich mich auf #16 konzentriert habe, da die Nachrichten schnell reinkammen. Habe es in #24 Offengelegt. Die einzigen Zeilenumbrüche befinden sich in PHPMailer in den Strings, aber diese werden nicht ausgegeben. Das einzige echo wäre ja das die Mail net versand wurden wäre, aber dann würde ich ja bekommen: Message could not be sent. Mailer Error: 500Ue . Also Message could not be sent. Mailer Error: {$mail->ErrorInfo} + Echo Ue. Aber dieser Satz hat kein <br>. Und ja die Emails kamen alle bei mir im Postfach an.


----------



## KonradN (1. Sep 2022)

wer112 hat gesagt.:


> Da hast du recht, leider habe ich dies irgendwie nich war bewusst wargenommen, da ich mich auf #16 konzentriert habe


Das ist auch vollkommen in Ordnung, @LimDul hat das ja noch einmal unterstrichen mit starker Betonnung auf "alle". Und der Smiley ist ja auch absichtlich gesetzt ... 

Wichtig ist: Es muss nicht zwingend ein echo sein - das ist ein Nachteil bei diesen Strukturen, bei dem Code in Ausgabedateien eingebunden ist. Da kann eine Leerzeile vor dem <?... (und ggf. auch am Ende nach dem Schließen des Tags?!) ausreichen.

Daher würde ich da auch immer mit einem Trim arbeiten um Leerzeilen zu beseitigen.


----------



## Jw456 (1. Sep 2022)

Wie schaut den der Aufruf der Webseite aus? Rufst du die  PHP  Datei  auf oder eine HTML Datei  in der das PHP im Body ist?


----------



## wer112 (1. Sep 2022)

Jw456 hat gesagt.:


> Wie schaut den der Aufruf der Webseite aus? Rufst du die  PHP  Datei  auf oder eine HTML Datei  in der das PHP im Body ist?


Fast alle Seiten ist nur PHP. Es befinden sich keine Leerzeichen über oder unter der PHP deklation. Es  haben max. 3 PHP Dateien HTML Code. Die ganzen Scripte, um Änderungen oder Daten zu liefern, haben kein HTML Code. Und ich habe ja nixs anderes gemacht, als bei den anderen Fragmente. Das einzigste was ich sonst nicht habe, ist das eine Mail rausgesendet wird, aber das einzigste Echo ist im Catch und würde ich diesen Echo erhalte, dann bekomme ich ja den Echo + Ue als Ergebniss. Die einziegen Zeilenumbrüche befinden sich in den String Variablen in PHPMailer, aber dieser Code wird nicht ausgegeben. ICh habe alles Überprüft und ich verstehe es bis jetzt immer noch nicht. Habe dir ja mein Code in #24 geschickt.


----------



## LimDul (1. Sep 2022)

Kannst du die php Dateien - bereinigt um sensible Infos - bereit stellen?


----------



## wer112 (1. Sep 2022)

LimDul hat gesagt.:


> Kannst du die php Dateien - bereinigt um sensible Infos - bereit stellen?


Was meinst du? Genau?


----------



## LimDul (1. Sep 2022)

Den gesamten PHP code, inklusive der per require eingebunden Dateien.

Ich gehe davon aus, dass da sensible Daten (Passwörter etc.) drin sind, die natürlich vorher entfernen

Es geht übrigens nicht nur um Echos - sonder nauch um Leerzeilen vor/nach den <?php bzw ?> Tags.

Deswegen am besten als Zip anhängen hier


----------



## Jw456 (1. Sep 2022)

Was bekommst du  zurück wenn du die Seite im Browser aufrufst und nicht mit der App? Das gleiche auch den Zeilenumbruch?


----------



## KonradN (1. Sep 2022)

Jw456 hat gesagt.:


> Was bekommst du  zurück wenn du die Seite im Browser aufrufst und nicht mit der App? Das gleiche auch den Zeilenumbruch?


Das wird nichts bringen, denn der Browser wird da auch keine Leerzeilen anzeigen.

Kannst Du ja einfach mal ausprobieren: Öffne eine Datei test.html einmal nur mit "Ue" und dann mit mehreren Leerzeilen davor.

Beim Seitenquelltext könnte man es dann natürlich sehen, aber wenn es in der Response des Requests enthalten ist: Woher soll das sonst kommen? Das wird da schon drin sein ...


----------



## Jw456 (1. Sep 2022)

KonradN hat gesagt.:


> Beim Seitenquelltext könnte man es dann natürlich sehen, aber wenn es in der Response des Requests enthalten ist: Woher soll das sonst kommen? Das wird da schon drin sein ...


das habe ich angenommen das er das macht.


----------



## wer112 (1. Sep 2022)

LimDul hat gesagt.:


> Den gesamten PHP code, inklusive der per require eingebunden Dateien.
> 
> Ich gehe davon aus, dass da sensible Daten (Passwörter etc.) drin sind, die natürlich vorher entfernen
> 
> ...


Dein Tipp war Gold wert!!! 
Natürlich haben die anderen das ja bereits erwähnt. Nachdem ich angefangen habe die Dateien für die Zip vorzubereiten, ist mir 2 Zeilenumbrüche nach ?> aufgefallen. Keine Ahnung, wiso ich den ganzen Tag übersehen habe. Ein PHPMailer habe ich ja fast nie(bei Registrierung/Passwort vergessen) drinnen, sonst  nie. Musste erstmal es ausprobieren bevor ich antworte.

Letzte frage: Wäre es besser, wenn ich anstatt require include_once nehme? Wenn ich außversehen wieder welche reinmache?

Also Danke an Alle!


----------



## KonradN (1. Sep 2022)

wer112 hat gesagt.:


> Wäre es besser, wenn ich anstatt require include_once nehme? Wenn ich außversehen wieder welche reinmache?


Ich denke, die Frage ist so erst einmal falsch gestellt:

a) require vs. include: Bei require ist sicher, dass die Datei gefunden wurde und geladen werden konnte. Ist dies nicht der Fall, dann gibt es einen Fehler. Bei include wird nur eine Warnung ausgegeben.

b) _once oder nicht? Wenn Du ein Problem hast, dass Du ggf. Dinge versehentlich mehrfach einbaust, dann kann das Sinn machen. Wichtig ist: Das gibt es sowohl bei require als auch bei include.

Also ggf. willst Du ein require_once haben. Das kannst aber nur Du wissen. Ich bin kein großer PHP Entwickler - für mich sah das aber immer etwas nach einem Hack aus und war mehr ein Zeichen, dass der Entwickler selbst keinen Überblick mehr hat, was er wo wie mit eingefügt hat.


----------

