as

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
Calcolare data e ora corrente in C++

Calcolare data e ora corrente in C++

Vediamo oggi una piccola funzione per calcolare data e ora corrente in C++.

Per farlo ci bastano poche righe di codice e la libreria ctime.

Da questa libreria prenderemo:

  • la funzione time(), che ritorna un oggetto di tipo time_t e in pratica legge l'ora corrente come numero di secondi trascorsi dal 1° Gennaio 1970
  • la funzione asctime(), che converte l'orario in stringa
  • la funzione localtime(), che contiente l'ora corrente suddivisa in diverse parti (giorni, ore, ecc)
  • la funzione strftime(), per formattare l'output

Quindi la nostra funzione sarà qualcosa del genere:

#include <iostream>
#include <ctime>

using namespace std;

int main() {
    time_t currentTime;
    time(&currentTime);
    cout << asctime(localtime(&currentTime)) << endl;
    return 0;
}

Creiamo una variabile di tipo time_t.

Poi con la funzione time() leggiamo l'ora corrente e la salviamo nella varibile currentTime.

Poi stampiamo l'output usando asctime() per trasformare in stringa l'ora corrente che ci viene restituita dal localtime().

L'ouput sarà una tipo questo:

Wed Dec 12 12:59:09 2012

Non molto ben formattato a dire il vero.

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
Disabilitare tasto invio in un form con jQuery

Disabilitare tasto invio in un form con jQuery

Ecco un altro modo per bloccare il tasto invio in un form, stavolta però con jQuery.

Quindi prima di tutto includete la libreria nella pagina, poi il form:

<form action="" method="" id="myform>

.........

</form>

L'importante qua è l'ID, che verrà usato da jQuery.

Mattepuffo's logo
Intercettare tasto invio in C++

Intercettare tasto invio in C++

Ho un programma in C++ che si avvia e rimane attivo in attesa di connessioni con un ciclo infinito.

Voglio poterlo terminare usando il semplice tasto ENTER / INVIO.

Vediamo come fare sia in Visual C++ (quindi una versione per Windows), sia in C++ usando Ncurses (che gira quindi su Linux).

Visto che la versione VC++ è più semplice partiamo da qua.

Per controllare la pressione dei tasti su Windows dobbiamo usare la libreria conio.h.

Quindi includiamola e poi nel main:

#include // TUTTO QUELLO CHE VI SERVE
................
#include <conio.h>

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
       // LANCIO PROGRAMMA CON CICLO INFINITO
       if(_getch() == 13)
       {
           // ESCO DAL PROGRAMMA
       }
      return 0;
}

La funzione _getch() controlla il carattere premuto; nella tabella ASCII il 13 corrisponde ad ENTER.

Se viene premuto esco dal programma.

Per Linux invece dobbiamo agire in maniera diversa in quanto conio.h è una libreria specifica Microsoft.

Ci sono vari porting per Linux, ma da quanto ho capito si basano anche su Ncurses.

Quindi io ho usato direttamente questa libreria.

Per programmare con questa libreria bisogna prima installare i pacchetti devel; su Opensuse:

# zypper install ncurses-devel

Questo pacchetto non è richieso per l'esecuzione, ma è comunque richiesto ncurses.

Mattepuffo's logo
Asp.NET LinkButton

Asp.NET LinkButton

In una pagina aspx ho un LinkButton con il quale attivo un evento.

La cosa più "problematica" è che devo passare il valore del LinkButton ad un altro componente.

In questo caso non bastano le solite proprietà Value o Text.

Andiamo con ordine; questo il componente nella pagina:

<asp:LinkButton ID="btn_art_singolo" runat="server" OnCommand="go_Click" CommandName='<%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>'>
   <%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>
</asp:LinkButton>

Il LinkButton sta dentro a un Repeater e prende il valore in maniera dinamica da database.

Tanto per cominciare no avremo un evento OnClick ma u nevento OnCommand.