Tutorial: Come creare una Todo App in Java e SQLite | PT. 1

Lo sviluppo di applicazioni Android passa spesso dalla gestione dei dati locali. In questo video realizziamo una ToDo App Android utilizzando SQLite, il database locale integrato nel sistema Android, ideale per salvare informazioni in modo persistente senza bisogno di una connessione internet.

Vediamo insieme i concetti principali affrontati e perché questo progetto è un ottimo esercizio per migliorare le proprie competenze.

Nota: se ti sei perso il video su SQLite, clicca qua.

Nota: se ti sei perso l’articolo sulla creazione di un progetto in Android Studio, clicca qua.

Perché usare SQLite in un’app Android

SQLite è una soluzione leggera, veloce e già inclusa in Android. È perfetta per:

  • salvare dati localmente (task, note, impostazioni)
  • creare app funzionanti anche offline
  • gestire CRUD (Create, Read, Update, Delete)
  • comprendere le basi della persistenza dei dati

In una ToDo App, SQLite è la scelta ideale per memorizzare l’elenco delle attività dell’utente.

Crea il progetto

  • Avvia Android Studio
    • Se non hai un progetto aperto, clicca su New Project nella schermata principale;
    • Altrimenti, vai su File > New > New Project;
  • Scegli un modello di progetto:
    • Nella finestra New Project, seleziona il modello Empty View Activity;
  • Configura il progetto:
    • Name: Inserisci Todo App come nome del progetto;
    • Package Name: Usa un nome univoco, ad esempio com.tuonome.todoapp;
    • Save Location: Specifica dove salvare il progetto;
    • Language: Seleziona Java;
    • Minimum SDK: Scegli API 28: Android 9.0 (Pie);
    • Build configuration language: Seleziona Groovy SDL (build.grandle);
  • Clicca su Finish: Android Studio genererà i file base del tuo progetto.

Quando crei un progetto, Android Studio genera due file di default:

  • MainActivity.java: E’ il file che si occupa della logica dell’activity;
  • activity_main.xml: E’ il file che si occupa del layout dell’activity MainActivity;

Modifica la UI

Per creare il layout della tua app, lavoreremo sul file XML che definisce l’interfaccia utente.

  • Apri il file res/layout/activity_main.xml.
  • Personalizza il layout: Sostituisci il contenuto con il seguente codice XML per creare un EditText, un Buton e un ListView:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

  <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="20dp"
      android:layout_marginHorizontal="50dp"
      android:hint="Aggiungi una Todo"
      android:id="@+id/editTextTodo"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="50dp"
        android:text="Aggiungi"
        android:layout_marginVertical="10dp"
        android:id="@+id/buttonAdd"/>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listViewTodo"/>

</LinearLayout>
  • LinearLayout: lo usiamo per avere un layout verticale per avere tutti gli elementi uno sotto l’altro;
  • EditText: lo usiamo come input di testo;
  • Button: lo salviamo come bottone per salvare le nostre tasks;
  • ListView: la usiamo per visualizzare la lista delle nostre tasks;

Creare il database

Per creare il nostro database, avremo bisogno di creare una classe che estende SQLiteOpenHelper:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

import java.util.ArrayList;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "todo.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME = "todo";

    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String createTable = "CREATE TABLE " + TABLE_NAME + "(" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "task TEXT)";
        sqLiteDatabase.execSQL(createTable);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public void addTask(String task)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("task",task);

        db.insert(TABLE_NAME,null,values);
        db.close();
    }

    public ArrayList<String> getAllTasks()
    {
        ArrayList<String> list = new ArrayList<>();
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME,null);

        if(cursor.moveToFirst()){
            do{
                list.add(cursor.getString(1));
            }while (cursor.moveToNext());
        }

        cursor.close();
        db.close();
        return list;
    }
}
  • SQLiteOpenHelper gestisce il database;
  • onCreate(): crea la tabella;
  • addTask(): salva una tasks;
  • getAllTasks(): recupera le tasks;

Collegare UI e database

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    EditText editTextTodo;
    Button buttonAdd;
    ListView listViewTodo;

    ArrayAdapter<String> adapter;
    ArrayList<String> todoList;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        editTextTodo = findViewById(R.id.editTextTodo);
        buttonAdd = findViewById(R.id.buttonAdd);
        listViewTodo = findViewById(R.id.listViewTodo);

        db = new DatabaseHelper(this);
        todoList = db.getAllTasks();

        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,todoList);
        listViewTodo.setAdapter(adapter);

        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String task = editTextTodo.getText().toString();

                if(!task.isEmpty()){
                    db.addTask(task);
                    todoList.add(task);
                    adapter.notifyDataSetChanged();
                    editTextTodo.setText("");
                }
            }
        });

    }

Quando premiamo il bottone, prendiamo il testo, lo salviamo nel database e
aggiorniamo la lista.

Conclusione

In questo progetto abbiamo realizzato una ToDo App Android in Java utilizzando SQLite per la gestione dei dati locali. L’app consente di salvare e visualizzare le attività in modo persistente e offline, sfruttando un database leggero già integrato nel sistema Android.

Questo esempio rappresenta un ottimo punto di partenza per comprendere i concetti fondamentali della persistenza dei dati, del CRUD e dell’interazione tra interfaccia grafica e database. Il codice è volutamente semplice e leggibile, ideale per chi sta imparando lo sviluppo Android.

✔ App funzionante
✔ Dati salvati offline
✔ Codice semplice e comprensibile

Nel prossimo video miglioreremo l’interfaccia grafica utilizzando Material Design e aggiungeremo la funzionalità di eliminazione delle To-Do, rendendo l’app ancora più completa.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Share via
Copy link
Verificato da MonsterInsights