venerdì 26 ottobre 2012

Errore su Toast in Android

Un esempio di come puo' avere dei trabocchetti la programmazione su Android anche su cose semplici come la creazione di un widget Toast



Nel referenziare il context del comando Toast.maketext e' necessario riportare il nome della activity in cui si sviluppa il comando (in questo caso MainActivity) altrimenti si genera un errore
   
------------------------------------------------------
btngraph.setOnClickListener(new View.OnClickListener() {
               private Toast toast;
                public void onClick(View v) {

                       // Questo genera un errore
 
                        toast = Toast.makeText(this, R.string.errore, Toast.LENGTH_LONG);
 
                       // Questo NON genera un errore                         toast = Toast.makeText(MainActivity.this, R.string.errore, Toast.LENGTH_LONG);
 


                       toast.show();
                    }

Leggere DMG su Linux

Puo' accadere, specialmente adesso che Apple la sta facendo da padrona, di dover spacchettare un file .dmg ....come fare senza un Mac a disposizione ??



per prima cosa si scarica dmg2iso

apt-get install dmg2iso

in seguito si converte in formato img
dmg2iso pacchetto.dmg

quindi si monta il modulo per il file system hfsplus e si monta il file immagine

modprobe hfsplus
mount -t hfsplus -o loop pacchetto.img /media/sdc

lunedì 22 ottobre 2012

Scambiare dati tra due Activity in Android


Per passare i dati tra due Acitivity, senza la necessita' di dichiarare variabili globali, si puo' usare un Bundle e inserirci i valori (specificando il formato di ogni variabile)

Di seguito un esempio 
 
Attivita' 1 : spedisce i dati 
----------------------------------------------------------------------------------
Bundle dataBundle = new Bundle();
dataBundle.putInt("gradini", gradino);
                  
dataBundle.putDouble("portata1", Double.parseDouble(portata1.getText().toString()));
dataBundle.putDouble("soggiacenza1", Double.parseDouble(soggiacenza1.getText().toString()));
dataBundle.putDouble("portata2", Double.parseDouble(portata2.getText().toString()));
dataBundle.putDouble("soggiacenza2", Double.parseDouble(soggiacenza2.getText().toString()));
dataBundle.putDouble("portata3", Double.parseDouble(portata3.getText().toString()));
dataBundle.putDouble("soggiacenza3", Double.parseDouble(soggiacenza3.getText().toString()));
dataBundle.putDouble("portata4", Double.parseDouble(portata4.getText().toString()));
dataBundle.putDouble("soggiacenza4", Double.parseDouble(soggiacenza4.getText().toString()));
dataBundle.putDouble("portata5", Double.parseDouble(portata5.getText().toString()));
dataBundle.putDouble("soggiacenza5", Double.parseDouble(soggiacenza5.getText().toString()));
 

Intent Intentdati = new Intent(); 
Intentdati.setClass(MainActivity.this,Grafico.class);
Intentdati.putExtras(dataBundle);
startActivity(Intentdati);

----------------------------------------------------------------------------------

Attivita' 2 : riceve i dati
----------------------------------------------------------------------------------
 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grafico);
 

Bundle da = getIntent().getExtras();
gradini = da.getInt("gradini");
portata1 = da.getDouble("portata1");
soggiacenza1 = da.getDouble("soggiacenza1");
portata2 = da.getDouble("portata2");
soggiacenza2 = da.getDouble("soggiacenza2");
portata3 = da.getDouble("portata3");
soggiacenza3 = da.getDouble("soggiacenza3");
portata4 = da.getDouble("portata4");
soggiacenza4 = da.getDouble("soggiacenza4");
portata5 = da.getDouble("portata5");
soggiacenza5 = da.getDouble("soggiacenza5");

----------------------------------------------------------------------------------

venerdì 19 ottobre 2012

Pulire la cache dei file Deb in Debian

Nel caso in cui sia necessario libera spazio da una Debian si puo' rimuovere la cache dei pacchetti .deb che sono contenuti nelle seguenti directory

/var/cache/apt/archives
/var/cache/apt/archives/partial

la loro cancellazione non crea problemi al normale funzionamento 

altrimenti si puo' usare il piu' pulito

apt-get clean

NumberFormatException da conversione in Numero di un campo EditText

asd


Stavo cercando di convertire i dati ripresi da una EditText in un numero a virgola mobile utilizzando il seguente comando


st = Double.parseDouble(txtportata.getText().toString());



Immancabilmente pero' il programma mi generava una eccezione del tipo

NumberFormatException

relativa al fatto che la stringa non poteva essere convertita in un numero (per esempio per la presenza di spazi o comunque di caratteri differenti da quelli numerici).
Per forzare l'utente ad introdurre solo valori numerici ho modificato la proprieta' InputType a NumberDecimale della EditText.
In questo modo pero' non sembrava possibile inserire il valore del punto decimale.

Impiegando l'emulatore si ha la tasteria numerica sotto riportata e cliccando sui caratteri speciali appare la barra in cui sono comprese il punto, la virgola ed altri


Purtroppo pero' questi caratteri non vengono accettati dalla EditText

Per far apparire il punto decimale si deve arrivare alla tastiera sotto riportata ed effettuare doppio clic sul pulsante che racchiude la virgola ed il punto



A questo punto non vengono piu' generate eccezioni ed la conversione funziona correttamente

venerdì 12 ottobre 2012

Zlib

La libreria Zlib permette la compressione con un metodo simile (ma non uguale all'algoritmo LZW) a quello dei file Zip

per la compilazione si deve utilizzare la stringa sottostante
gcc -Wall -O3 -lz zlib_test.c -o zlib_test

per comprimere i file si utilizza il seguente codice
-----------------------------------------------------
 FILE *infile = fopen(infilename, "rb");
gzFile outfile = gzopen(outfilename, "wb");

char inbuffer[128];
while ((num_read = fread(inbuffer, 1, sizeof(inbuffer), infile)) > 0) {
      gzwrite(outfile, inbuffer, num_read);
}
fclose(infile);
gzclose(outfile);

-----------------------------------------------------

 mentre questo e' per decomprimere un file
-----------------------------------------------------
 gzFile infile = gzopen(infilename, "rb");
FILE *outfile = fopen(outfilename, "wb");

char buffer[128];
while ((num_read = gzread(infile, buffer, sizeof(buffer))) > 0) {
fwrite(buffer, 1, num_read, outfile);
}

gzclose(infile);
fclose(outfile);

-----------------------------------------------------

Analisi MNF su spettri di riflettanza di plastica

Devo cerca di lavorare su spettri di riflettanza di plastica e la prima domanda e': quale sono le bande significative? Sono partito dal ...