Autore Topic: HttpResponse, come capire quando non ho ricevuto record dallo script PHP  (Letto 606 volte)

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Salve, sapete spiegarmi come mai la entity non è nulla anche se lo script php non mi dà nessun risultato?
Codice (Java): [Seleziona]
//faccio una query al DB per vedere se l'utente si può identificare
                                String result = "";
                                InputStream is = null;
                                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                                nameValuePairs.add(new BasicNameValuePair("usrname", usrname));
                                nameValuePairs.add(new BasicNameValuePair("psw", psw));
                               
                                //POST
                                try{
                                        HttpClient httpclient = new DefaultHttpClient();
                                        HttpPost httppost = new HttpPost("http://192.168.56.1/log.php");
                                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                        HttpResponse response = httpclient.execute(httppost);
                                        //FIXME: in caso di mancata risposta dovrebbe esse NULL
                                        HttpEntity entity = response.getEntity();
                                        is = entity.getContent();
                                }catch(Exception e){
                                        showDialog(DIALOG_ERRORE);
                                        return;
                                }

                                //conversione della risposta in una stringa
                                try{
                                        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                                        StringBuilder sb = new StringBuilder();
                                        String line = null;
                                        while((line = reader.readLine()) != null){
                                                sb.append(line + "\n");
                                        }
                                        is.close();
                                       
                                        result = sb.toString();
                                }catch(Exception e){
                                        showDialog(DIALOG_ERRORE);
                                        return;
                                }
                               
                                //parse Json data
                                try{
                                           //FIXME: solo qui mi rendo conto di non aver ricevuto nessuna risposta dal server
                                        JSONArray jarray = new JSONArray(result);
                                        JSONObject json_obj = jarray.getJSONObject(0);
                                        String un = json_obj.getString("usrname");
                                       
                                }catch(Exception e){
                                        showDialog(DIALOG_ERRORE);
                                        return;
                                }

grazie per l'eventuale aiuto... :-)

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #1 il: 12 Luglio 2011, 12:14:51 CEST »
0
in teoria in caso di mancata risposta non si verifica l'entity, ma lo status code della response
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #2 il: 12 Luglio 2011, 13:05:49 CEST »
0
In pratica lo script php che lancio fa una query su un DB remoto. Come faccio per capire il numero di record che ottengo o, anche più semplicemente, solo se ottengo dei record o meno?

prima mi sono spiegata molto male, perchè non avevo ben  chiaro il meccanismo di risposta  :-P

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #3 il: 12 Luglio 2011, 13:39:08 CEST »
0
Hai per caso preso in considerazione di usare questo metodo?

http://developer.android.com/reference/org/json/JSONArray.html#length()

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #4 il: 12 Luglio 2011, 13:42:09 CEST »
0
puoi essere più preciso? c'è una lista di metodi XD
cmq vorrei rendermene conto prima di arrivare al terzo blocco di try{}catch(); così mi evito operazioni intuili...!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #5 il: 12 Luglio 2011, 13:59:48 CEST »
0
puoi essere più preciso? c'è una lista di metodi XD
cmq vorrei rendermene conto prima di arrivare al terzo blocco di try{}catch(); così mi evito operazioni intuili...!

http://developer.android.com/reference/org/json/JSONArray.html#length()

Punta al metodo length non a una lista ;)

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #6 il: 12 Luglio 2011, 14:05:06 CEST »
0
scusa ma mi si era aperta l'intera pagina dei metodi!  :-P

cmq arrivata a quel punto li lo capisco anche dal lancio dell'eccezione se ho più valori o no... io vorrei capirlo prima...testando la response, o l'entity o addirittura la stringa result, se proprio non posso intervenire prima. Ma non trovo il modo..
Ovviamente sono alle prime armi quindi non so se il modo esiste  O:-) però mi pare che abbia senso come domanda da porsi!  :-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #7 il: 12 Luglio 2011, 14:16:56 CEST »
0
Questa decisione deve stare a te, in base anche a come è realizzata la parte lato server. Idealmente potesti predisporre un apposito codice HTTP per quando non sono trovati record anche se secondo me non è l'approccio migliore perchè andresti a violare la semantica di http.
L'idea è che ti viene ritornato un array json vuoto, tu verifichi che è vuoto ed agisci di conseguenza.

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #8 il: 12 Luglio 2011, 14:18:19 CEST »
0
capito! allora era quello che facevo.... :-)

grazie!

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:HttpResponse, come capire quando non ho ricevuto record dallo script PHP
« Risposta #9 il: 12 Luglio 2011, 14:50:20 CEST »
0
cmq, sfruttando la tua idea del "length", ho modificato il codice in questo modo: [lo posto nel caso potesse servire a qualcuno  :-)]

Codice (Java): [Seleziona]
String result = "";
                                InputStream is = null;
                                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                                nameValuePairs.add(new BasicNameValuePair("usrname", usrname));
                                nameValuePairs.add(new BasicNameValuePair("psw", psw));
                               
                                //POST
                                try{
                                        HttpClient httpclient = new DefaultHttpClient();
                                        HttpPost httppost = new HttpPost("http://192.168.56.1/log.php");
                                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                        HttpResponse response = httpclient.execute(httppost);
                                        HttpEntity entity = response.getEntity();                                      
                                        is = entity.getContent();
                                }catch(Exception e){
                                        showDialog(DIALOG_ERRORE);
                                        return;
                                }
                                //conversione della risposta in una stringa
                                try{
                                        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                                        StringBuilder sb = new StringBuilder();
                                        String line = null;
                                        while((line = reader.readLine()) != null){
                                                sb.append(line + "\n");
                                        }
                                        is.close();
                                       
                                        result = sb.toString();
                                }catch(Exception e){
                                        showDialog(DIALOG_ERRORE);
                                        return;
                                }
                                if(result.length() != 0){
                                        Intent intent = new Intent(main_Activity.this, Index.class);
                                        String pkg = getPackageName();
                                        intent.putExtra(pkg + ".usrname", usrname);
                                        startActivity(intent);
                                        finish();
                                }

dove il metodo length l'ho applicato ma alla stringa evitando d'arrivare fino al json :)
in pratica non cambia niente, evito solo qualche riga di codice e delle import...

Grazie ancora per il suggerimento, tendo a perdermi in un bicchiere d'acqua!!!  :-P :-P