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();
}
venerdì 26 ottobre 2012
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
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
/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
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);
-----------------------------------------------------
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);
-----------------------------------------------------
Creare grafico (scatterplot) con AndroidPlot
Di seguito viene mostrato un esempio (sostanzialmente autoesplicativo nel codice) su come realizzare grafici ScatterPlot mediante la libreria AndroidPlot
activity_grafico.xml
-------------------------------------------------------------
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.androidplot.xy.XYPlot
android:id="@+id/Grafico"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
title="Well Test" />
</RelativeLayout>
-------------------------------------------------------------
Grafico.java
-------------------------------------------------------------
package com.luca.innocenti.well.test;
import java.util.Arrays;
import com.androidplot.series.XYSeries;
import com.androidplot.ui.AnchorPosition;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XLayoutStyle;
import com.androidplot.xy.XYPlot;
import com.androidplot.xy.YLayoutStyle;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
public class Grafico extends Activity {
private XYPlot Grafico;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grafico);
//inizializza il grafino
Grafico = (XYPlot) findViewById(R.id.Grafico);
//definisce le coppie di valori X (portata) ed Y (soggiacenza)
Number[] portata = {0,1.0, 2, 3, 4, 5};
Number[] soggiacenza = {0, -2, -4, -6, -8, -12};
XYSeries dati = new SimpleXYSeries(Arrays.asList(portata), Arrays.asList(soggiacenza), "Dati");
// crea lo stile per i punti
LineAndPointFormatter series1Format = new LineAndPointFormatter(
Color.rgb(0, 200, 0), // line color
Color.rgb(0, 100, 0), // point color
null); // fill color (none)
// aggiunge i dati al grafico
Grafico.addSeries(dati, series1Format);
// AndroidPlot chiama Range l'asse X e Domain l'asse Y
// riduce il numero di ticks su entrambi gli assi
Grafico.setTicksPerRangeLabel(3);
Grafico.setTicksPerDomainLabel(3);
// mette il colore bianco in background
Grafico.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE);
Grafico.getGraphWidget().setMarginTop(10);
// cancella la legenda dal grafico
Grafico.getLegendWidget().setVisible(false);
//scrive le label sugli assi
Grafico.setDomainLabel("Portata");
Grafico.getDomainLabelWidget().pack();
Grafico.setRangeLabel("Soggiacenza");
Grafico.getRangeLabelWidget().pack();
Grafico.disableAllMarkup();
Grafico.position(Grafico.getDomainLabelWidget(),0,XLayoutStyle.ABSOLUTE_FROM_CENTER,5, YLayoutStyle.ABSOLUTE_FROM_BOTTOM, AnchorPosition.CENTER);
//Grafico.setGridPadding(15, 0, 15, 0);
}
}
-------------------------------------------------------------
asd
activity_grafico.xml
-------------------------------------------------------------
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.androidplot.xy.XYPlot
android:id="@+id/Grafico"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
title="Well Test" />
</RelativeLayout>
-------------------------------------------------------------
Grafico.java
-------------------------------------------------------------
package com.luca.innocenti.well.test;
import java.util.Arrays;
import com.androidplot.series.XYSeries;
import com.androidplot.ui.AnchorPosition;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XLayoutStyle;
import com.androidplot.xy.XYPlot;
import com.androidplot.xy.YLayoutStyle;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
public class Grafico extends Activity {
private XYPlot Grafico;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grafico);
//inizializza il grafino
Grafico = (XYPlot) findViewById(R.id.Grafico);
//definisce le coppie di valori X (portata) ed Y (soggiacenza)
Number[] portata = {0,1.0, 2, 3, 4, 5};
Number[] soggiacenza = {0, -2, -4, -6, -8, -12};
XYSeries dati = new SimpleXYSeries(Arrays.asList(portata), Arrays.asList(soggiacenza), "Dati");
// crea lo stile per i punti
LineAndPointFormatter series1Format = new LineAndPointFormatter(
Color.rgb(0, 200, 0), // line color
Color.rgb(0, 100, 0), // point color
null); // fill color (none)
// aggiunge i dati al grafico
Grafico.addSeries(dati, series1Format);
// AndroidPlot chiama Range l'asse X e Domain l'asse Y
// riduce il numero di ticks su entrambi gli assi
Grafico.setTicksPerRangeLabel(3);
Grafico.setTicksPerDomainLabel(3);
// mette il colore bianco in background
Grafico.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE);
Grafico.getGraphWidget().setMarginTop(10);
// cancella la legenda dal grafico
Grafico.getLegendWidget().setVisible(false);
//scrive le label sugli assi
Grafico.setDomainLabel("Portata");
Grafico.getDomainLabelWidget().pack();
Grafico.setRangeLabel("Soggiacenza");
Grafico.getRangeLabelWidget().pack();
Grafico.disableAllMarkup();
Grafico.position(Grafico.getDomainLabelWidget(),0,XLayoutStyle.ABSOLUTE_FROM_CENTER,5, YLayoutStyle.ABSOLUTE_FROM_BOTTOM, AnchorPosition.CENTER);
//Grafico.setGridPadding(15, 0, 15, 0);
}
}
-------------------------------------------------------------
asd
Iscriviti a:
Post (Atom)
Mappa frane da news on line
Correva l'anno 2008 ed il mio direttore di Dipartimento mi aveva chiesto di lavorare sui Big Data per estrarre dati di geolocalizzazione...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...




