androi

Mattepuffo's logo
IDE ed editor di sviluppo

IDE ed editor di sviluppo

Ho deciso di scrivere questo articolo perchè ricevo diverse richieste su quali IDE ed editor utilizzo per lo sviluppo.

Inoltre può anche essere un punto di confronto tra noi utenti.

Vi faccio un elenco specificando per quali attività e su quale sistema, e se possibile indicando anche un perchè.

Mattepuffo's logo
Creare file in Android

Creare file in Android

Diciamo che quasi tutte le app hanno bisogno di scrivere delle informazioni da qualche parte.

Ad esempio, nel mio caso, ho una appa che prende i dati da dei file JSON, memorizzati nella memoria dello smartphone.

Oggi vediamo come creare i file attraverso le nostre app Android.

Prima di tutto nell'Activity (o nel Fragment) impostiamo il path generale di dove salvare i file:

private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;

Il metodo getExternalStorageDirectory identifica, appunto, lo external storage di un dispositivo.

A questo punto vediamo come creare i file; nel mio esempio interrogo una base dati in remoto, e con i dati restuiti creo il file.

Avrò quindi una classe AsyncTask che richiama tutto il resto:

public class DownloadDatas extends AsyncTask<Object, Object, Object>  {

        @Override
        protected Object doInBackground(Object... params) {
            Service s = new Service();
            try {
                JsonFile.create(path + "last_entries.json", s.getLastItems("last_entries.php"));
            } catch (ClientProtocolException e) {
            } catch (IOException e) {
            } catch (JSONException e) {
            }
            return null;
        }
    }

L'oggetto Service è quello che si preoccupa di interrogare un web service remoto.

Di questo ne ho già parlato e quindi non mi ci soffermo.

Mattepuffo's logo
Usare le animazioni in Android

Usare le animazioni in Android

Impostare le animazioni nelle nostre app in Android non è per nulla difficile, almeno per quelle di base.

Android, inoltre, già fornisce alcune animazioni di base, ma noi ne andremo a creare una nostra.

La nostra animazione farà si che la view parta dall'angolo superioe a sinistra, per spostarsi verso il centro dello schermo.

Prima di tutto dentro alla cartella res creiamo una cartella denominata anim; questa conterrà le nostre animazioni in formato XML.

Per il nostro scopo ci serviranno due file, uno per la posizione di partenza e uno per quella finale.

Cominciamo dal secondo, che ho chiamato zero.xml:

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toXDelta="0"
    android:toYDelta="0" />

Altro non faccio che impostare le coordinate X e Y da zero a zero.

Mattepuffo's logo
Android ListView da JSON

Android ListView da JSON

In un precedente articolo vi avevo mostrato come riempire uno Spinner in Android prendendo i dati in remoto in formato JSON.

Oggi vedremo come fare la stessa operazione con una ListView, che però inseriremo in un Fragment.

La base di partenza per i Fragment dentro a un Tab la potete trovare qua.

Adesso andremo a riempire il nostro Fragment con una ListView.

Prima però andiamo a prendere la classe Service per il recupero dei dati:

public class Service {

    private final String remote = "http://www.example.com/";
    
    public String login(String user, String pwd) throws ClientProtocolException, IOException {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(remote + "login.php");
        List nameValuePairs = new ArrayList(2);
        nameValuePairs.add(new BasicNameValuePair("user", user));
        nameValuePairs.add(new BasicNameValuePair("pwd", pwd));
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = client.execute(post);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String line;
        String result = null;
        while ((line = reader.readLine()) != null) {
            result = line;
        }
        reader.close();
        return result;
    }
    
    public String getLastItems(String phpFile) throws ClientProtocolException, IOException, JSONException {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(remote + phpFile);
        HttpResponse response = client.execute(post);
        HttpEntity entity = response.getEntity();
        BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        reader.close();
        return sb.toString();
    }

}

Questo è il metodo che ci servirà nel Fragment, metodo a simile a quello spiegato in altri articoli, quindi non mi ci soffermo.

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.

Mattepuffo's logo
Inviare richieste POST in Android

Inviare richieste POST in Android

Lo scenario è questo; per vedere il contenuto è obbligatorio eseguire il login, e le credenziali sono salvate sun un database remoto.

A seconda della risposta del server ci sarà un un messaggio di errore oppure verremo mandati all'activiy principale della app.

Il layout è abbastanza semplice:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/txt_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:ems="10"
        android:inputType="text"
        android:text="" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/txt_pwd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/txt_user"
        android:layout_below="@+id/txt_user"
        android:layout_marginTop="24dp"
        android:ems="10"
        android:inputType="textPassword"
        android:text="" />

    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/txt_pwd"
        android:layout_below="@+id/txt_pwd"
        android:layout_marginTop="30dp"
        android:text="@string/btn_login" />

</RelativeLayout>

Si compone di un Button e due EditText.