I cookie permettono il funzionamento di alcuni servizi di questo blog. Utilizzando questi servizi, accetti l'utilizzo dei cookie da parte nostra. Ok Rifiuta

Importare dati da un url JSON a un'app Android

Moltissime volte, nello sviluppo Android, si ha l'esigenza di importare dei dati da un URL e farli consultare dagli utenti nell'app che state sviluppando. In questo articolo vedremo come fare un importer da un URL che ci restituisce dei dati in formato JSON. Innanzitutto creiamo lo script PHP (usiamo il PHP e il database per questo esempio) che si occuperà di prendere i dati da un database e stamparli a video richiamando il nostro url di esempio http://www.esempio.it/json.php . Il nostro semplice script sarà:

<?php
// parametri del database
$db_host = "sql.hostesempio.it";
$db_user = "usernamedatabase";
$db_password = "passworddatabase";
$db_name = "nomedatabase";
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
    die ("Errore nella connessione.");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri...");
mysql_query('SET CHARACTER SET utf8');
$q=mysql_query("SELECT * FROM articoli");
while($e=mysql_fetch_assoc($q))
        $output[]=$e;
print(json_encode($output)); // funzione che ci codificherà l'output in formato json
mysql_close();
?>

Fatto questo passiamo alla porzione di codice che dovremmo aggiungere all'Activity in questione della nostra app. Questo codice importerà il testo stampato dallo script precedente in PHP e lo formatterà in modo da mettere i dati nelle variabili di tipo String in JAVA gestendo l'eccezione se l'operazione non andrà a buon fine:

final String URL = "http://www.esempio.it/json.php";

String json = getTextFromUrl(URL);

try {

   JSONArray jsonArray = new JSONArray(json);
          
   // looping through all item nodes <item>    
   for (int i = 0; i < jsonArray.length(); i++) {
                 String titolo = jsonArray.getJSONObject(i).getString("titolo");
                 String articolo = jsonArray.getJSONObject(i).getString("articolo");
                 list.add(new ElementoPI(nome,indirizzo,telefono,mail,sito,latitudine,longitudine)); // la variabile list è una lista in Java
    }
} catch (Exception e) {
     Toast.makeText(this, "Exception" + e,Toast.LENGTH_LONG).show();
     e.printStackTrace();
}

Così facendo la variabile list conterrà tutti i dati che abbiamo importato dal database con lo script PHP e possiamo usarla, per esempio, in un Custom Adapter per realizzare una listview in Android.

Seguici su Facebook

Seguici su Google+

Renzo Cappelli

miafoto

Sono un appassionato di informatica, mi dedico allo sviluppo web e alla gestione dei sistemi web-based: realizzo siti e progetto software gestionale per privati e aziende. Ho tanta passione per tutto quello che riguarda il web e le nuove tecnologie, lavoro bene in team e collaboro con aziende e professionisti di settore.

Commenti

utente
carmine ha scritto il 14/04/2014 - 10:37:01 :

getTextfromUrl non è definito...Come dovrebbe essere?
renzo cappelli
Renzo ha scritto il 14/04/2014 - 12:17:00 :

Ciao Carmine, grazie del commento, la funzione getTextFromUrl(url) l'ho definita così:

public String getTextFromUrl(String url) {
        String json = null;
 
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
 
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            json = EntityUtils.toString(httpEntity);
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return json;
    }

inoltre ricorda di aggiungere i permessi per la rete nell'Android Manifest in questo modo <uses-permission android:name="android.permission.INTERNET"/>. A presto.

utente
Tomas Toffolet ha scritto il 04/01/2015 - 22:05:57 :

Salve ho provato a seguire la guida ma nel momento in cui lancio l'applicazione mi crasha alla riga "HttpResponse httpResponse = httpClient.execute(httpPost);" del getTextFromUrl. La pagina da cui sto provando a prendere informazioni, creata da me, è la seguente: http://desoss.altervista.org/wit-server/android_wikimapia_request.php?lat=45.466632&lon=9.200020&json=true&side=1&max=100. I permessi al manifest li ho aggiunti! Grazie in anticipo!
renzo cappelli
Renzo ha scritto il 07/01/2015 - 16:04:43 :

Ciao Tomas, riportami esattamente cosa ti dice il log e vediamo cosa potrebbe essere. A presto.

Lascia il tuo commento