Volley String Response gibt falchen if aus

wer112

Top Contributor
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:

Java:
  @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:

Code:
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!
 

Robert Zenz

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

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

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

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

wer112

Top Contributor
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:

PHP:
  echo "Ue";

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



}else{


    echo "Du bist ausgeloggt.";
  
}

?>
 

wer112

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

Java:
Log.e("AnonymerModus", "Response: <" + response.toString() + ">");
Habe das jetz so gemacht.
Und vermutlich wird deine Ausgabe, wie @fhoffmann schon sagte, dann so aussehen:

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

Es kommt wie du hervorgesehen hast:
Code:
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:

PHP:
        echo "Ue"; //Ursprüngliche Ausgabe....

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


}else{


    echo "Du bist ausgeloggt.";
  
}

?>
 

KonradN

Super-Moderator
Mitarbeiter
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

Top Contributor
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:
<?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

Top Contributor
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....
.


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:

Java:
   @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:

Code:
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.
Und response ist doch bereits ein String - wieso rufst Du da noch toString() auf?

Das frage ich mich gerade auch...
 

Jw456

Top Contributor
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

Top Contributor
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

Top Contributor
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:
<?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

Super-Moderator
Mitarbeiter
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.

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.
 

Jw456

Top Contributor
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
 

wer112

Top Contributor
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:
<?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:
<?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:

PHP:
}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.



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

Top Contributor
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

Super-Moderator
Mitarbeiter
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

Top Contributor
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

Top Contributor
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

Top Contributor
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

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

KonradN

Super-Moderator
Mitarbeiter
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 ...
 

wer112

Top Contributor
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
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

Super-Moderator
Mitarbeiter
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W JSON VOLLEY Post Android & Cross-Platform Mobile Apps 32
W Volley onDestroy angemeldet bleiben Fehler... unabhänging vom Login Android & Cross-Platform Mobile Apps 37
W StringRequest und JsonObjectRequest gemeinsam (Volley) Android & Cross-Platform Mobile Apps 5
W Session bzw. Cookie per Volley übergeben Android & Cross-Platform Mobile Apps 16
W UTF-8 String Android & Cross-Platform Mobile Apps 66
W Base64 konvertierter URI String Android & Cross-Platform Mobile Apps 32
W String Array Pfad in Int setzen Android & Cross-Platform Mobile Apps 54
H Anfänger String types not allowed (at 'textColor' with value 'black' Android & Cross-Platform Mobile Apps 13
W Firestore String in Apps Laden Android & Cross-Platform Mobile Apps 10
T Android R.string.test+i Problem Android & Cross-Platform Mobile Apps 2
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
C Zugriff auf die Position eines String- bzw Spinner-Arrays Android & Cross-Platform Mobile Apps 1
J Android String in andere Java-Dateien überführen Android & Cross-Platform Mobile Apps 1
J R.string.(variable) geht das Android & Cross-Platform Mobile Apps 3
R Android incomingNumber bein Eingehenden Anruf immer leerer String Android & Cross-Platform Mobile Apps 4
S SPLIT funktion bei STRING funktioniert nicht! Android & Cross-Platform Mobile Apps 4
G String an einen php Script senden Android & Cross-Platform Mobile Apps 8
J Plötzlich "java.lang.String cannot be converted to JSONObject" Android & Cross-Platform Mobile Apps 9
T int to string ... Android & Cross-Platform Mobile Apps 8
A String[] für Lisadapter Android & Cross-Platform Mobile Apps 4
M jsonobject cannot be cast to java.lang.string Android & Cross-Platform Mobile Apps 4
N Android Hilfe string to float geht nicht... Android & Cross-Platform Mobile Apps 4
J Einen String bewegen wie? Android & Cross-Platform Mobile Apps 3
R String wie WAV Datei nutzen Android & Cross-Platform Mobile Apps 4
C 2 kleine Probleme (Datei lesen, String durchsuchen) Android & Cross-Platform Mobile Apps 16
L String dem Display anpassen Android & Cross-Platform Mobile Apps 12
G Text parsen String to Double Android & Cross-Platform Mobile Apps 2
S ein String nach vorgegebenen Zeichen teilen Android & Cross-Platform Mobile Apps 3
N Zeichen im String löschen? Android & Cross-Platform Mobile Apps 18
M MIDlet + Datum in String Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben