Ragazzi, è possibile che due stringhe assolutamente identiche all'occhio umano (una generata dinamicamente come concatenazione di alcune entry di un database e l'altra statica che è un copia-incolla della prima in un echo) siano diverse in qualche modo?
Sto facendo un progetto in Android (da consegnare stasera ) che dovrebbe comunicare con un server PHP. Tale server riceve la richiesta, cerca nel DB e restituisce una stringa composta da valori separati da virgole. Il programma android si comporta in modo stranissimo:
http://youtu.be/qsIhe3vdEiY
In pratica, nonostante la stringa generata sia assolutamente IDENTICA, se è generata come concatenazione di elementi del database in java ottengo NULL, altrimenti ottengo la stringa come la vedete nel browser, e poi provvedo a separarla nei suoi vari pezzi ed inserirla in un array.
ASSURDO.

Codice PHP:
Codice PHP:
include "dbconn.inc";   //Connessione database

if(!isset ($_REQUEST[rich])){
    echo 
"Nessuna richiesta ricevuta.";
    exit();
}

$richiesta $_REQUEST[rich];   //ID richiesta
$username $_REQUEST[user];
$password $_REQUEST[pass];
$loginverificato=false;

//Verifichiamo che username e password coincidano
$sql="select * from utenti where username = '$username' and password = '$password'";
$res=mysql_query($sql,$ConnessioneDB);
while (
$records=mysql_fetch_assoc($res)) {
    
$loginverificato=true;
};

if((
$richiesta==1)||($loginverificato)){    //Se l'utente è già registrato e risulta presente nel DB oppure si deve ancora iscrivere, esegue il codice
    
switch ($richiesta){
    case 
1registrazione($ConnessioneDB$username$password$_REQUEST[nome]);
        break;
    case 
2: echo "LoginOk";
        break;
    case 
3creditoresiduo($ConnessioneDB$username);
        break;
    case 
4//echo "-bird,dog/d,c at,cow,sheep";
        //echo "-60,riparazione lavandino,2012/2/21,pluto,+30,ripetizioni grammatica,2012/2/22,pluto";
        //echo estrattoconto($ConnessioneDB, $username, $_GET[mode]);
       
echo "-60,riparazione lavandino,2012/2/21,pluto,+30,ripetizioni grammatica,2012/2/22,pluto";
        break;
    case 
5:
        break;
    default :
        break;
    }
} else {    
//Se invece nome utente e password non coincidono, ritorna errore
    
echo "LoginError";
}









/******************************* FUNZIONI ****************************/
function registrazione($ConnessioneDB$username$password$nome){
    
$sql "INSERT INTO `bancadeltempo`.`utenti` (`username`, `password`, `nomecognome`) VALUES ('$username', '$password', '$nome');";
    
mysql_query($sql,$ConnessioneDB) or die( "RegError");
    echo 
"RegOk";
}

function 
ricerca(){

}

function 
creditoresiduo($ConnessioneDB$username){
    
$sql="select credito from portafoglio where username = '$username'";
    
$res=mysql_query($sql,$ConnessioneDB);
    while (
$records=mysql_fetch_assoc($res)) {
    echo 
$records[credito];
    };
}

//function estrattoconto($ConnessioneDB, $username, $mode){
//    if($mode=="1") $sql="select * from ultimeoperazioni where usernamebeneficiario = '$username' limit 0 , 10";
//    if($mode=="2") $sql="select * from ultimeoperazioni where usernamepagante = '$username' limit 0 , 10";
//    if($mode=="0") $sql="select * from ultimeoperazioni where usernamepagante = '$username' or usernamebeneficiario = '$username' limit 0 , 10"; //Tira fuori gli ultimi 10 valori
//    $res=mysql_query($sql,$ConnessioneDB);
//    while ($records=mysql_fetch_assoc($res)) $output[]=$records; //Recupera i record
//    print(json_encode($output));    //Creiamone una stringa json
//    mysql_close();
//}

function estrattoconto($ConnessioneDB$username$mode){
    if(
$mode=="1"$sql="select * from ultimeoperazioni where usernamebeneficiario = '$username' limit 0 , 10";
    if(
$mode=="2"$sql="select * from ultimeoperazioni where usernamepagante = '$username' limit 0 , 10";
    if(
$mode=="0"$sql="select * from ultimeoperazioni where usernamepagante = '$username' or usernamebeneficiario = '$username' limit 0 , 10"//Tira fuori gli ultimi 10 valori
    
$res=mysql_query($sql,$ConnessioneDB);
    
$i=0;
    
$return="";
    while (
$records=mysql_fetch_assoc($res)){
        if(
$i!=0$return $return.",";
        
$i++;
        if(
$records[usernamepagante]==$username) {
            
$return $return."-";   //Mettiamo il segno per far capire se è un'entrata o un'uscita
            
$utente $records[usernamebeneficiario]; //L'utente in questo caso è chi ha ricevuto il pagamento
        
}
        else {
            
$return $return."+";
            
$utente $records[usernamepagante]; //Vice versa di sopra
        
}
        
$credito $records[credito];
        
$causale $records[causale];
        
$anno $records[anno];
        
$mese $records[mese];
        
$giorno $records[giorno];
        
$return $return.$credito.",".$causale.",".$anno."/".$mese."/".$giorno.",".$utente;
    }
    
mysql_close();
    return 
$return;
}

function 
pagamento(){

}


?> 
Codice JAVA nell'app su Android:
Codice PHP:
private static String executeHttpRequest(String data) {    //Si preoccupa della trasmissione e ricezione di dati dal server
        
String result "";
        try {
            
//URL url = new URL(SERVER_URL);
            
URL url = new URL("http://192.168.1.136/BancaDelTempoServer/server.php");
            
URLConnection connection url.openConnection();
     
            
// Impostazioni varie (I/O, Non usa cache, tipo)
            
connection.setDoInput(true);
            
connection.setDoOutput(true);
            
connection.setUseCaches(false);
            
connection.setRequestProperty("Content-Type""application/x-www-form-urlencoded");
     
            
// Invia query POST
            
DataOutputStream dataOut = new DataOutputStream(connection.getOutputStream());
            
dataOut.writeBytes(data);
            
dataOut.flush();
            
dataOut.close();
     
            
// Recupera risposta server
            
DataInputStream dataIn = new DataInputStream(connection.getInputStream());
            
String inputLine;
            while ((
inputLine dataIn.readLine()) != null) {
                
result += inputLine;  // <-- PUNTO 2 (vedi spiegazione sotto)
            
}
            
dataIn.close();
        } catch (
IOException e) {
            
            
e.printStackTrace();    //Logga l'errore
            
result null;    //Restituisce null <-- PUNTO 1 (vedi sotto)
        
}
     
        return 
result;
    } 
Dal debugger vedo che ritorna null non a causa di un'eccezione (come si vede al punto 1) ma proprio nel punto 2, ovvero quando legge il risultato del web server.

Avete qualche idea?