Interrogazionedi un DB MySql da client android tramite server php | Forum Android | AndroidWorld

ATTENZIONE:
L’Utente assume la totale responsabilità anche giuridica per ogni attività da lui svolta e per ogni contenuto pubblicato e/o scambiato. (leggi le condizioni d’uso).

Si invitano gli Utenti a non pubblicare o scambiare alcuna informazione che permetta di risalire, anche indirettamente, alla propria identità o all’identità di terzi (nome, cognome, residenza, email…) e divulgare alcun tipo di dato sensibile proprio o di terzi.

X
  1. #1
    Baby Android
    Registrato dal
    Sep 2013
    Residenza
    Napoli
    Dispositivo
    Samsung Galaxy S4
    Operatore
    H3G
    Messaggi
    7
    Grazie!
    0
    Ringraziato 0 volte in 0 post

    Interrogazionedi un DB MySql da client android tramite server php

    Salve a tutti ,ho il seguente problema : cercando nei vari forum su internet ho trovato un modo per interrogare da un client (smartphone android) un database mysql situato sul mio pc di casa tramite apposito e semplice server scritto in php. Peccato che non funzioni.
    Vi posto il codice e vi spiego il problema:
    Il database è semplice
    E' un database MySql (io lo ho chiamato “hellohttp”) che contiene una tabella chiamata “Persone”, dentro la quale abbiamo i campi “id”, “nome”, “cognome”.

    Qui di seguito c’è il codice della pagina “richiestaInfo.php” che risiede sul server e verrà invocata dall’applicazione android per prelevare dei dati dal database:
    Codice PHP:
    <?php
    mysql_connect
    ("localhost:3306"," root ","");
    mysql_select_db("hellohttp");
     
    $q=mysql_query("SELECT * FROM persone WHERE id=".$_REQUEST['idnomerichiesto']);
    while(
    $e=mysql_fetch_assoc($q))
            
    $output[]=$e;
     
    print(
    json_encode($output));
     
    mysql_close();
    ?>
    Premetto che io sto usando wamp per lanciare il server da casa
    Non ho fatto altro che creare il database con mysql ,poi ho creato con il blocco notes il file in php e l'ho copiato nella cartella www di wamp e ho avviato il tutto in mkodo che fosse attivo quando qualche client si connettesse.

    Ora vediamo il codice dell’applicazione Android che fa da client e che vuole interrogare il server remoto ed ottenere i dati di un particolare “id”:

    codice:
    package com.hellohttppostactivity;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
             //public String str_finale = "";
         TextView textviewDatiRicevuti;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // inizializzo la variabile globale
            textviewDatiRicevuti = (TextView) findViewById(R.id.datiRicevuti);
    
            Button buttonInviaDati = (Button) findViewById(R.id.buttonInviaDati);
            buttonInviaDati.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    //invio richiesta
                        //textviewDatiRicevuti.setText(inviaDati());
                         HttpGetTask task = new HttpGetTask();
                     task.execute();
                }
            });
        }
    
    
    
        private class HttpGetTask extends AsyncTask<String,String,String>  {
    
            @Override
            protected String doInBackground(String... params) {
                    String result = "";
                String stringaFinale = "";
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("idnomerichiesto","1"));
                InputStream is = null;
    
                //http post
                try{
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost("http://192.168.0.2:8080/richiestaInfo.php");
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        HttpResponse response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                }catch(Exception e){
                        Log.e("TEST", "Errore nella connessione http "+e.toString());
                }
                if(is != null){
                    //converto la risposta in stringa
                    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();
                    }catch(Exception e){
                            Log.e("TEST", "Errore nel convertire il risultato "+e.toString());
                    }
    
                    System.out.println(result);
    
                    //parsing dei dati arrivati in formato json
                    try{
                            JSONArray jArray = new JSONArray(result);
                            for(int i=0;i<jArray.length();i++){
                                    JSONObject json_data = jArray.getJSONObject(i);
                                    Log.i("TEST","id: "+json_data.getInt("id")+
                                            ", cognome: "+json_data.getString("cognome")+
                                            ", nascita: "+json_data.getInt("anno")
                                    );
                                    stringaFinale = json_data.getInt("id") + " " + json_data.getString("cognome") + " " + json_data.getInt("anno") + "\n\n";
                            }
                    }
                    catch(JSONException e){
                            Log.e("log_tag", "Error parsing data "+e.toString());
                    }
                }
                else{//is è null e non ho avuto risposta
    
                }
    
                return stringaFinale;
    
            }
    
            @Override
            protected void onProgressUpdate(String... values) {
    
            }
    
            @Override
            protected void onPostExecute(String result) {
                // aggiorno la textview con il risultato ottenuto
                    textviewDatiRicevuti.setText(result);
            }
         }
    }
    


    Tenta di connettersi ma poi mi dà errore nella connessione.
    Se cambio la porta da 8080 a 80 sembra connesso ma poi da errore di JSONException ,infatti ho messo una stampa del risultato e sembra ci sia un errore nella lettura della pagina di 403 forbidden.
    Ora non so proprio dove sbaglio ,come vi ripeto io sto usando wamp

  2. #2
    Android Pro
    Registrato dal
    Feb 2011
    Residenza
    Torino
    Dispositivo
    LG Optimus Dual, Samsung i5500
    Operatore
    Vodafone
    Messaggi
    877
    Grazie!
    18
    Ringraziato 135 volte in 96 post
    Hai impostato il server per accettare connessioni al di fuori del localhost?

    Inviato dal mio LG-P760 con Tapatalk 4

  3. #3
    Baby Android
    Registrato dal
    Sep 2013
    Residenza
    Napoli
    Dispositivo
    Samsung Galaxy S4
    Operatore
    H3G
    Messaggi
    7
    Grazie!
    0
    Ringraziato 0 volte in 0 post
    Ho risolto aggiungendo i permessi per l'accesso al server da parte del secondo computer che fungeva da client.
    Mi è bastato modificare il file httpd.conf di configurazione di apache.

  4. #4
    Baby Android
    Registrato dal
    Sep 2015
    Residenza
    Bari
    Dispositivo
    lg
    Operatore
    Altro (Italia)
    Messaggi
    3
    Grazie!
    0
    Ringraziato 0 volte in 0 post
    [QUOTE=jonnyilbello;1228903]Salve a tutti ,ho il seguente problema : cercando nei vari forum su internet ho trovato un modo per interrogare da un client (smartphone android) un database mysql situato sul mio pc di casa tramite apposito e semplice server scritto in php. Peccato che non funzioni.
    Vi posto il codice e vi spiego il problema:
    Il database è semplice
    E' un database MySql (io lo ho chiamato “hellohttp”) che contiene una tabella chiamata “Persone”, dentro la quale abbiamo i campi “id”, “nome”, “cognome”.

    Qui di seguito c’è il codice della pagina “richiestaInfo.php” che risiede sul server e verrà invocata dall’applicazione android per prelevare dei dati dal database:
    Codice PHP:
    <?php
    mysql_connect
    ("localhost:3306"," root ","");
    mysql_select_db("hellohttp");
     
    $q=mysql_query("SELECT * FROM persone WHERE id=".$_REQUEST['idnomerichiesto']);
    while(
    $e=mysql_fetch_assoc($q))
            
    $output[]=$e;
     
    print(
    json_encode($output));
     
    mysql_close();
    ?>
    Premetto che io sto usando wamp per lanciare il server da casa
    Non ho fatto altro che creare il database con mysql ,poi ho creato con il blocco notes il file in php e l'ho copiato nella cartella www di wamp e ho avviato il tutto in mkodo che fosse attivo quando qualche client si connettesse.

    Ora vediamo il codice dell’applicazione Android che fa da client e che vuole interrogare il server remoto ed ottenere i dati di un particolare “id”:

    codice:
    package com.hellohttppostactivity;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
             //public String str_finale = "";
         TextView textviewDatiRicevuti;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // inizializzo la variabile globale
            textviewDatiRicevuti = (TextView) findViewById(R.id.datiRicevuti);
    
            Button buttonInviaDati = (Button) findViewById(R.id.buttonInviaDati);
            buttonInviaDati.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    //invio richiesta
                        //textviewDatiRicevuti.setText(inviaDati());
                         HttpGetTask task = new HttpGetTask();
                     task.execute();
                }
            });
        }
    
    
    
        private class HttpGetTask extends AsyncTask<String,String,String>  {
    
            @Override
            protected String doInBackground(String... params) {
                    String result = "";
                String stringaFinale = "";
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("idnomerichiesto","1"));
                InputStream is = null;
    
                //http post
                try{
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost("http://192.168.0.2:8080/richiestaInfo.php");
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        HttpResponse response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                }catch(Exception e){
                        Log.e("TEST", "Errore nella connessione http "+e.toString());
                }
                if(is != null){
                    //converto la risposta in stringa
                    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();
                    }catch(Exception e){
                            Log.e("TEST", "Errore nel convertire il risultato "+e.toString());
                    }
    
                    System.out.println(result);
    
                    //parsing dei dati arrivati in formato json
                    try{
                            JSONArray jArray = new JSONArray(result);
                            for(int i=0;i<jArray.length();i++){
                                    JSONObject json_data = jArray.getJSONObject(i);
                                    Log.i("TEST","id: "+json_data.getInt("id")+
                                            ", cognome: "+json_data.getString("cognome")+
                                            ", nascita: "+json_data.getInt("anno")
                                    );
                                    stringaFinale = json_data.getInt("id") + " " + json_data.getString("cognome") + " " + json_data.getInt("anno") + "\n\n";
                            }
                    }
                    catch(JSONException e){
                            Log.e("log_tag", "Error parsing data "+e.toString());
                    }
                }
                else{//is è null e non ho avuto risposta
    
                }
    
                return stringaFinale;
    
            }
    
            @Override
            protected void onProgressUpdate(String... values) {
    
            }
    
            @Override
            protected void onPostExecute(String result) {
                // aggiorno la textview con il risultato ottenuto
                    textviewDatiRicevuti.setText(result);
            }
         }
    }
    


    ho avuto un problema simile: prova a cambiare solo due righe di codice.
    in php invece di scrivere:

    mysql_connect("localhost:3306"," root ","");

    scrivi:

    mysql_connect("localhost"," root ","");


    mentre in android invece di scrivere

    HttpPost httppost = new HttpPost("http://192.168.0.2:8080/richiestaInfo.php");

    scrivi questo:

    HttpPost httppost = new HttpPost("http://192.168.0.2/richiestaInfo.php");

    fammi sapere

Discussioni simili

  1. Collegarsi a db esterno (mysql)
    Da Antonio78 nel forum App Inventor
    26-01-2014
    7Risposte
  2. Vnc server e WindowsXp client
    Da misternet nel forum LG Optimus L3
    05-05-2013
    0Risposte
  3. [APP] DroidMote Server / Client
    Da zulu99 nel forum Applicazioni
    07-01-2012
    1Risposte
  4. client exchange per android
    Da fastram nel forum Applicazioni
    12-07-2011
    0Risposte
  5. SWIftp - FTP server per Android
    Da Snazzo nel forum Applicazioni
    22-10-2010
    2Risposte

Segnalibri

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  

Search Engine Friendly URLs by vBSEO 3.6.1