cta

Mattepuffo's logo
Usare le MenuBar in QML

Usare le MenuBar in QML

QML consente di scrivere applicazioni Qt usando un linguaggio simile a Javascript, misto alle classi C++ del framework.

Molto interessante, soprattutto per chi conosce bene Javascript.

Oggi vediamo come usare il componente MenuBar in una applicazione Qt Quick.

Una volta creato un progetto Qt Quick Application con Qt Creator, ci ritroviamo il file main.qml con un oggetto Rectangle.

Per usare le MenuBar dobbiamo però passare a ApplicationWindow, e questo comporta qualche modifica al progetto iniziale.

Mattepuffo's logo
Usare i ProgressDialog in Android

Usare i ProgressDialog in Android

I ProgressDialog sono molto usati anche in ambito mobile, in quanto consentono di "bloccare" lo schermo avvertendo l'utente quando una determinata operazione finisce.

In generale la sequenza per usare questo oggetto è questa:

ProgressDialog pd = new ProgressDialog(Activity.this);
pd.setMessage("loading...");
pd.show();
// DO STUFF
pd.dismiss();

In sostanza, creiamo il dialog, lo avviamo, eseguiamo le operazioni e lo chiudiamo.

Mattepuffo's logo
Download file in Android

Download file in Android

Quello che vediamo oggi è come scaricare file in Android dalla rete.

Prima di tutto i permessi da mettere nell'AnrdoidManifest:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Come vedete due sono quelli che ci servono come minimo: quello legato a internet per la connessione, e quello per salvare i file sul dispositivo.

Nella nostra Activity:

public class MainActivity extends Activity {
    
    private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new DownloadDatas().execute("");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    public class DownloadDatas extends AsyncTask  {

        @Override
        protected Object doInBackground(Object... params) {
            try {
                DownloadFile.downlad(path + "file.sqlite");
            } catch (IOException e) {
            }
            return null;
        }
      
    }

}

Come prima cosa, notiamo che qui impostiamo il path che punta alla directory interna al dispositivo, dove salvare i file.

Mattepuffo's logo
Usare gli AlertDialog in Android

Usare gli AlertDialog in Android

Gli AlertDialog sono dei componenti molto utili per inviare dei messaggi all'utente, anche perchè obbligano l'utente a vedere che c'è un avviso.

Solo che ad essere sincero li trovo più comlicati rispetto ai "cugini" di iOS.

Comunque vediamo di creare una classe che possa rappresentare un AlertDialog generico e che possa essere richiamato ovunque, anche in azioni asincrone.

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;

public class GenericDialog {
    
    public static void createDialog(String message, Context context) {
        final AlertDialog alert = new AlertDialog.Builder(context).create();
        alert.setTitle("ERROR");
        alert.setMessage(message);
        alert.setButton(-3, "OK", new DialogInterface.OnClickListener() {
            
            public void onClick(DialogInterface dialog, int which) {
                alert.cancel();
            }
        });
        alert.show();
    }
}

C'è un solo metodo statico che richiede due parametri: il messaggio e il contesto in cui deve essere richiamato.

Questo secondo parametro è essenziale se si vuole richiamarlo in contesti asincroni.