Autore Topic: Problema con JSON su MySQL  (Letto 642 volte)

Offline Pacobillo

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus one
  • Sistema operativo:
    Windows 7
Problema con JSON su MySQL
« il: 25 Settembre 2013, 12:28:33 CEST »
0
Ciao a tutti.
Sto effettuando le prime chiamate su un mio server con MySQL utilizzando JSON.

Ho una tabella GIOCHI, se creo un JSON non parametrico, che estrae tutta la tabella, tutto ok.
Il problema è quando provo a passare un parametro per creare una where, dato che sembra essere sempre recepito come null, anche se sono sicuro di inviarlo correttamente valorizzato.

Ecco il codice:
Codice (Java): [Seleziona]
public String SingoloGioco(int codice) {
                    String result = "";
                    InputStream is = null;
                   
                    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                   
                    String chiave = Integer.toString(codice);
                    Log.d("chiave", chiave);
                    nameValuePairs.add(new BasicNameValuePair("codice",chiave));
                     
                   
                    try{
                            HttpClient httpclient = new DefaultHttpClient();
                            HttpPost httppost = new HttpPost("http://www.pisacon.it/SINGOLOGIOCO.php");
                            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            HttpResponse response = httpclient.execute(httppost);
                            HttpEntity entity = response.getEntity();
                            is = entity.getContent();
                    }catch(Exception e){
                            Log.e("log_tag", "Error in http connection "+e.toString());
                    }
                   
                    try{
                            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                            StringBuilder sb = new StringBuilder();
                            String line = null;
                            while ((line = reader.readLine()) != null) {
                                    sb.append(line + "\n");
                            }
                            is.close();
                     
                            result=sb.toString();
                            Log.d("stringa", result);
                    }catch(Exception e){
                            Log.e("log_tag", "Error converting result "+e.toString());
                    }
                     
                   
                    try{
                            JSONArray jArray = new JSONArray(result);
                            for(int i=0;i<jArray.length();i++){
                                    JSONObject json_data = jArray.getJSONObject(i);
                                    Log.i("log_tag","codice: "+json_data.getInt("GioCod")+", titolo: "+json_data.getString("GioTit"));
                            }
                        }catch(JSONException e){
                            Log.e("log_tag", "Error parsing data "+e.toString());
                        }
                        return result;

            }

Ed ecco il file PHP:

Codice: [Seleziona]
<?php
// parametri del database
$db_host = "*******";
$db_user = "*******";
$db_password = "*******";
$db_name = "*******";
$db = mysql_connect($db_host, $db_user, $db_password);

echo(mysql_error());
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri...");
mysql_select_db($db_name, $db) or die(mysql_error());
$q=mysql_query("SELECT * FROM GIOCHI WHERE GioTit='".$_REQUEST['gioco']."'");
while($e=mysql_fetch_assoc($q))
        $output[]=$e;
 
print(json_encode($output));
 
mysql_close();
?>

Codice: [Seleziona]
09-25 10:19:19.759: D/chiave(333): 2
09-25 10:19:20.849: D/stringa(333): null
09-25 10:19:20.849: E/log_tag(333): Error parsing data org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be converted to JSONArray
09-25 10:19:20.939: D/dalvikvm(333): GC_CONCURRENT freed 115K, 48% free 3061K/5831K, external 1285K/1683K, paused 15ms+9ms

Il risultato è sempre null.

Se nel php modifico la select togliendo il where (e quindi non utilizzando il parametro), tutto funziona...
Cosa sbaglio?
Grazie a tutti!!!!
Roberto

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Problema con JSON su MySQL
« Risposta #1 il: 25 Settembre 2013, 15:59:23 CEST »
0
L'output del server PHP deve essere un'array come il seguente:
Codice: [Seleziona]
Array ( 'chiave'=> 'valore', 'chiave 2' => 'valore 2' )

Offline Pacobillo

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus one
  • Sistema operativo:
    Windows 7
Re:Problema con JSON su MySQL
« Risposta #2 il: 25 Settembre 2013, 23:41:22 CEST »
0
Scusa, ma non ho capito cosa intendi...
Comunque non credo che il problema sia sul codice java, infatti, se con lo stesso codice modifico il file php lasciando la select senza parametro (ovvero SELECT * FROM tabella), tutto funziona ed ottengo un output come il seguente:

Codice: [Seleziona]
09-25 21:37:18.556: D/chiave(333): 2
09-25 21:37:18.986: D/stringa(333): [{"GioCod":"1","GioTit":"Agricola"},{"GioCod":"2","GioTit":"Carcassonne"}]

Il mio dubbio è sul perchè, quando invio il parametro (che sembra corretto in invio), questo non viene recepito o gestito bene dal file php.

Qualche idea?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con JSON su MySQL
« Risposta #3 il: 26 Settembre 2013, 07:11:33 CEST »
+1
Come prima cosa abbi pazienza ma non vedo (nel codice java) dove imposti il parametro gioco che il PHP si aspetta.

Seconda cosa, che forse avrai già fatto, puoi escludere del tutto il PHP richiamando la pagina da browser http://tuo_server/tua_pagina.php?gioco=tuo_gioco vedendo (sempre nel browser) cosa ti viene risposto.

Terza cosa, più che altro un consiglio per la versione finale, cerca di rendere il tutto molto più tollerante agli errori, cioè nel PHP prevedi la possibilità che arrivino meno parametri o addirittura sbagliati, valida ed eventualmente fai un override con default. Nel lato java gestisci risposte strane del server, come risposte vuote o altro, prevedendo di riprovare un certo numero di volte e comunque in modo da non avere uscite forzate dall'app (dal punto di vista utente molto meglio segnalare un errore di comunicazione col server).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Pacobillo

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus one
  • Sistema operativo:
    Windows 7
Re:Problema con JSON su MySQL
« Risposta #4 il: 26 Settembre 2013, 12:15:20 CEST »
0
Non posso credere di essere così stupido.... :)
Appena torno a casa provo a modificare il parametro inviato, ma credo che il problema sia davvero li....che fesso... :)
Grazie davvero, probabilmente mi ero così fissato che non l'avrei visto mai....
Per quanto riguarda gli errori, certamente su java inserirò tutti i controlli alla fine, mentre su php..beh..non è che ne sappia molto.. :)
Grazie ancora!