Come collegare un’app Android a un database MySQL

La connessione di un’app mobile a un database è l’aspetto fondamentale che caratterizza tutte le applicazioni presenti sui vostri smartphone. Vedremo in questo articolo come collegare un’app Android a un database MySQL.

Gli account utente, notizie aggiornate e valori statistici sono solo alcuni esempi dei dati che si potrebbe desiderare di archiviare o estrarre da un database. In questo articolo vedremo come connettere un’app Android a un database MySQL. Per eseguire la prova e il codice che vi proponiamo avrete bisogno di uno spazio web e di un database MySQL. Sono tutti servizi disponibili a pagamento e anche in versioni gratuite come ad esempio alcuni dei servizi offerti da Altervista.org che ospita da anni questo Blog e bene si può prestare per questi test di codice. La nostra app Android sarà un elenco di articoli coi prezzi, dove verranno visualizzati il nome e il prezzo.

Configurazione di un server MySQL

Il primo passo per imparare a connettere un’app Android a un database MySQL è configurare il backend. Ovviamente avremo bisogno di un server MySQL, ma avremo anche bisogno di una semplice API. La nostra app non si connetterà direttamente al database, ma dovrà inviare richieste a un’API che scriveremo. Questo semplice script prenderà la richiesta, la elaborerà e risponderà all’app. In questo articolo, utilizzeremo uno script PHP per la nostra API. Nel pannello amministrativo del vostro spazio web entrate con PHPMyAdmin e create un nuovo database, nel caso di spazi web o servizi gratuiti entrate nel database che avete disponibile. Create quindi la tabella articoli, e poi inserite i campi:

  • id, chiave primaria con incrementi automatici;
  • Aggiungere poi il campo nome;
  • Inserire dopo il campo prezzo.

Infine, aggiungete alcune righe che conterranno la descrizione dell’articolo ed il suo prezzo. Abbiamo quindi una tabella articoli con dei dati essenziali cone nome e prezzo di un articolo.

Configurazione dell’API Web

Il passaggio successivo per imparare a connettere un’app Android a un database MySQL è effettivamente estrarre i nostri dati. Per fare ciò, scriveremo un semplice script PhP. Vai avanti e apri il tuo testo o editor di codice preferito e aggiungi il seguente codice:

<?php

// Crea la connessione
$con=mysqli_connect("localhost","username","password","dbname");
// Verifica la connessione
if (mysqli_connect_errno())
{
echo "Impossibile connettersi a MySQL: " . mysqli_connect_error();
}

// Seleziona tutti gli articoli dalla tabella 'articoli'
$sql = "SELECT * FROM articoli";
// Conferma che ci sono risultati
if ($result = mysqli_query($con, $sql))
{

// Abbiamo dei risultati, creiamo un array per contenerli
// e un array per contenere i dati
$resultArray = array();
$tempArray = array();
// Ripeti per ogni risultato
while($row = $result->fetch_object())
{

// Aggiungi ogni risultato nell'array dei risultati
$tempArray = $row;
array_push($resultArray, $tempArray);
}

// Codifica l'array in JSON e invia i risultati
echo json_encode($resultArray);
}

// Chiudi la connessione
mysqli_close($con);
?>

Assicuratevi che i parametri corrispondano alla tua configurazione. Il nome utente sarà “root”, la password sarà la password di MySQL e “dbname” sarà quello che hai chiamato il tuo database. Salvate il file come “articoli_service.php”. Non ci resta che creare la nostra app per Android che estrarrà questi dati e li visualizzerà in un formato visibile sui vostri smartphone.

Come creare un’app Android per visualizzare i dati Android Studio framework

Abbiamo utilizzato per lo sviluppo dell’APP Android Studio con cui abbiamo creato un nuovo progetto. Assegnamogli un nome e selezionate un’attività vuota. La prima cosa che dobbiamo fare è consentire alla nostra app di accedere ai file su Internet. Passa al file AndroidManifest.xml e assicurati che disponga dell’autorizzazione dell’utente Internet:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.skysilk.brentfaragher.stocktrackerskysilk">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

Successivamente, configuriamo l’interfaccia utente della nostra app. Aprite il file activity_main.xml e aggiungete il codice seguente:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="net.simplifiedlearning.androidjsonparsing.MainActivity">
<!-- listview to display our stocks --> 
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
</RelativeLayout>

Estrazione e analisi dei dati

Infine, aggiungiamo alla nostra APP la funzionalità per estrarre e analizzare i dati dall’API web. Apri MainActivity.java e aggiungi queste righe di codice:

 import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
downloadJSON("http://vostro_spazio_web/articoli_service.php");
}

private void downloadJSON(final String urlWebService) {
class DownloadJSON extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
try {
loadIntoListView(s);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
protected String doInBackground(Void... voids) {
try {
URL url = new URL(urlWebService);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
StringBuilder sb = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json + "\n");
}
return sb.toString().trim();
} catch (Exception e) {
return null;
}
}
}
DownloadJSON getJSON = new DownloadJSON();
getJSON.execute();
}

private void loadIntoListView(String json) throws JSONException {
JSONArray jsonArray = new JSONArray(json);
String[] stocks = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
stocks[i] = obj.getString("nome") + " " + obj.getString("prezzo");
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, stocks);
listView.setAdapter(arrayAdapter);
}
}

Come abbiamo realizzato la nostra APP

Possiamo dire che la funzione principale è downloadJSON. Inizialmente chiamiamo questa funzione e passiamo l’URL per il nostro script PhP. Quindi, dopo aver ricevuto una risposta, analizziamo i dati JSON e li aggiungiamo in un array denominato “stocks”. Infine, carichiamo l’array nella nostra visualizzazione ad elenco. A questo punto se tutto è andato a buon fine esegui la tua app e dovresti vedere tutti i dati contenuti nel database MySQL!

Come collegare un’app Android a un database MySQL. Conclusioni

Ora che abbiamo imparato come connettere un’app Android a un database MySQL, ci sono diverse cose da fare successivamente per completare una APP che possa definirsi effettivamente completa ed efficiente:

  • Sviluppare le funzionalità di scrittura per inviare i dati al database MySQL
  • Scrivere la funzionalità per modificare le righe già inserite nel database
  • Aggiungere la possibilità di eliminare le righe presenti nel database

Un’ultima nota da considerare è la sicurezza. Sebbene questa app sia funzionale e valida per scopi di test e prova, non è stato trattato l’argomento sicurezza e quindi non è pronta per un utilizzo professionale. Visto che nella parte conclusiva di questo articolo abbiamo parlato di accesso ad un’area riservata vi suggeriamo di leggere un nostro articolo dedicato ad uno script php che illustra il codice area riservata e gestione utenti multilivello. In questo Blog abbiamo dedicato più di una sezione all’HTML e al PHP, linguaggi per il web dedicati alla costruzione delle pagine e dei layout per le Web Applications. Questi frammenti di codice possono essere integrati nei vostri progetti e nelle web applications per aumentarne le funzionalità.