Archivi categoria: CODE EXAMPLE

angular code examples

Databases per Mobile Apps

In questo post, consapevoli dell’importanza dei dati e della gestione degli stessi, nello sviluppo di una qualunque app dinamica, elenchiamo una serie di tematiche inerenti le database, la sua creazione e manipolazione, come le più note databases,  all’interno del processo dello sviluppo  siano esse native, web o ibride.

http://www.ilgiornaledelcibo.it/intossicazione-da-metalli-pesanti/
http://www.ilgiornaledelcibo.it/intossicazione-da-metalli-pesanti/
  • Mobile Databases: javascript cordova CRUD
  • Mobile Databases: ajax PHP, CRUD (prossima uscita)
  • Mobile Databases: Android CRUD (prossima uscita)
  • Mobile Databases: iOs CRUD (prossima uscita)
  • Mobile Databases: Windows CRUD (prossima uscita)
  • Lista database popolari per lo sviluppo di Mobile Apps (prossima uscita)
  • vari su i databasi per lo sviluppo di mobile Apps (prossima uscita)

Tutorial risorse e video corsi per imparare Java JSF in Eclipse – prima PARTE

Tutorial risorse e video corsi per imparare Java JSF  in Eclipse – WTP tools con Apache Tomcat

In questo post, si presenterà un elenco di collegamenti a risorse, tutorial e corsi video utili alla creazione delle java web application (desktop), con Eclipse e Apache Server utilizzando le Facelet di JSF 2.0.

java server pages jsf dynamic web apps java appissue
java server pages jsf
dynamic web apps
java appissue

how to use Java JSF into Eclipse with Apache Tomcat Server ? which are the best practices ?

jse apache tomcat eclipse
appissue: how to use Java JSF into Eclipse with Apache Tomcat Server

come scaricare (download) una immagine da web (url) usando AsyncTask in Android

asynctask steps
asynctask steps
LA CHIAMATA
new DownloadImageTask(holder.imageview).execute(urlImgS);


LA ASYNCTASK
		
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
		ImageView bmImage;

public DownloadImageTask(ImageView bmImage) {
	this.bmImage = bmImage;
}

protected Bitmap doInBackground(String... urls) {
	String urldisplay = urls[0];
	Bitmap mIcon11 = null;
	try {
	   InputStream in = new  java.net.URL(urldisplay).openStream();
	mIcon11 = BitmapFactory.decodeStream(in);
	} catch (Exception e) {
	  Log.e("Error", e.getMessage());
	  e.printStackTrace();
	}
	 return mIcon11;
}

protected void onPostExecute(Bitmap result) {
   bmImage.setImageBitmap(result);
}
}
}//AsyncTask

Come e quando si usa AsyncTask in android (thread) – code esempio

 

Un’attività asincrona è definita da un calcolo che viene eseguito su un thread (filo o processo) in background (sottofondo) e il cui risultato è condiviso e pubblicato sul thread UI (processo della UI).

android AsyncTask
android AsyncTask (image  lucadentella)

Un thread o thread di esecuzione, in informatica, è una suddivisione di un processo in due o più filoni o sotto processi, che vengono eseguiti con-correntemente da un sistema di elaborazione.

AsyncTask consente un uso corretto e semplice del thread UI (processo o filo principale della Interfaccia Utente).

Questa classe consente di eseguire operazioni in background (sottofondo) e di condividere i loro risultati sul thread UI ossia sul filo o processo dell’interfaccia utente, senza dover gestire processi/fili o utilizzare maipolatori di eventi (handlers).

AsyncTask è stato progettato per essere una classe di supporto per Thread ed Handler e non costituisce framework di thread generico.
AsyncTask dovrebbe idealmente essere utilizzato per operazioni di breve durata (pochi secondi al massimo).

Se è necessario conservare un thread (filo) in esecuzione per lunghi periodi di tempo, si consiglia vivamente di utilizzare le varie API fornite dal pacchetto java.util.concurrent package tali come Executor, ThreadPoolExecutor e FutureTask.

Un compito asincrono è definito da 3 tipi generici, chiamati (params, progress, result), e di 4 momenti (passaggi nel tempo), chiamati respettivamente OnPreExecute, doInBackground, onProgressUpdate e OnPostExecute.

params, progress, result

 

Android Code Esempio AsyncTask

LA CHIAMATA

package com.apps.xxxx.xxxx;

import android.app.Activity;
...
public class MainActivity extends Activity {
   ...
  public GridView gridview;
  @Override
  protected void onCreate(Bundle savedInstanceState)      {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main1);
     
     // Creating a new non-ui thread
     jsonAsyncTask downloadTask = new jsonAsyncTask();
     ...
 }
}


I QUATTRO (TRE) PASSAGGI
(attenzione ai parametri generici...params, progress, result ... String, Void, String)

/** AsyncTask to download json data */
private class jsonAsyncTask extends AsyncTask
<String, Void, String> {

ProgressDialog dialog;
@Override
protected void onPreExecute() {
   super.onPreExecute();
   //dialog
   dialog = new ProgressDialog(MainActivity.this);
   dialog.setTitle("Connecting server  ");
   dialog.setMessage("Loading, please wait");
   dialog.setIndeterminate(true);
   dialog.setCancelable(false);
   dialog.show();
 }
//last param String
  String data = null;

@Override
protected String doInBackground(String... url) {
try{
   data = getJSONString(url[0]);
   }catch(Exception e){
    return "notok";
   }
    return "ok";
  }

/** Invoked by the Android on "doInBackground" is executed */

@Override
protected void onPostExecute(String result) {
dialog.dismiss();
//dialog.cancel();
//adapter.notifyDataSetChanged();
 if(result =="ok") {
  adapter = new ItemAdapter(MainActivity.this, R.layout.row, listitems);
   gridview.setAdapter(adapter);
  }else{
   showToast("Unable to fetch data from server");                
  }//endif
 }//onPosExecute
}//AsyncTask

come fare il parsering dei dati in formato Json in Android

del formato json si deve conoscere …

appissue json rest http
appissue json rest http

In primo luogo si deve analizzare i dati, gli oggetti o le stringhe in formato Json.

In particolare Items è un oggetto, conformato da un Array da oggetti con CodPro, Brand, FormattedFullPrice.

{"Items": 
   [
	{
	"CodPro": "2234567899",
	"Brand": "XXX ZZZ",	
	"FormattedFullPrice": "Euro 2,620.00",
	},
        {
	"CodPro": "2234123456",
	"Brand": "ALPHA",	
	"FormattedFullPrice": "Euro 1,120.00",
	},
        {
	"CodPro": "2234234567",
	"Brand": "BETA",	
	"FormattedFullPrice": "Euro 1,112.00",
	},
   ]
}

dopo si devono creare le classi per gestire l’oggetto Item. creare la Classe Items con gli getters e setters e infine creare le constanti per gestire i nomi dei componenti degli array di oggetti.

LA CLASSE ITEMS

public class Items{
  private String brand;
  private String codPro;
  private String formattedFullPrice; 
  	
  
  public String getBrand(){
	return this.brand;
 }
public void setBrand(String brand){
	this.brand = brand;
 }
 public String getCodPro(){
	return this.codPro;
 }
 public void setCodPro(String cod10){
	this.codPro = codPro;
 }
 public String getFormattedFullPrice(){
	return this.formattedFullPrice;
 }
 public void setFormattedFullPrice(String  formattedFullPrice){
	this.formattedFullPrice = formattedFullPrice;
}
 	
}
...

LE VARIABILI

 private static final String ENTITY_NAME = "Items";  
 private static final String BRAND = "Brand";
 private static final String CODPRO = "CodPro";
 private static final String FORMATTEDFULLPRICE = "FormattedFullPrice"; 
PARSERING

private Boolean parseJson(String jsonString) {
 String myS;
 try {
  JSONObject jsono = new JSONObject(jsonString);
  JSONArray jarray = jsono.getJSONArray(ENTITY_NAME);

  for (int i = 0; i < jarray.length(); i++) {
    JSONObject object = jarray.getJSONObject(i);
    Items item = new Items();
    item.setCodPro(object.getString(CODPRO));
    item.setBrand(object.getString(BRAND));         item.setFormattedFullPrice(object.getString
    (FORMATTEDFULLPRICE));
    /* myS = (item.getCod10() + " " + item.getBrand()  + " " + item.getCod10());
    Log.d("item iessimo " , myS);*/
    listitems.add(item);
  }//endfor*/
  //test
  /*for (int i = 0; i < jarray.length(); i++) {
    Log.d(" *** ***   iesimo ",   listitems.get(i).getCod10());
   }*/
 } catch (JSONException e) {
      Log.d("Parse Json error ",e.toString());
      return false;
  }//endcarch
 return true;
}

Come usare HttpURLConnection in Android

Una URLConnection per HTTP (RFC 2616) consente di inviare e ricevere dati attraverso il web.

appissue json
appissue json

Questi dati possono essere di qualsiasi tipo e lunghezza.

Questa classe può essere utilizzata per inviare e ricevere dati in streaming cui lunghezza non è nota in anticipo.

  • Ottenere un nuovo HttpURLConnection chiamando URL.openConnection () e lanciando il risultato di HttpURLConnection.
  • Preparare la richiesta. La struttura primaria di una richiesta è suo URI. (la richiesta può comprendere anchei metadati quali le credenziali, i tipi di contenuti preferiti e cookies di sessione.
    Opzionalmente si può caricare un corpo della richiesta.
  • Le istanze devono essere configurati con setDoOutput (vero) se includono un corpo.
  • I dati vengono trasmessi ad un flusso restituito da getOutputStream ().
  • si legge la risposta. Il corpo di risposta può essere letto dal flusso restituito da getInputStream (). Se la risposta non ha corpo, il metodo restituisce un flusso di vuoto.
  • Disconnect. Una volta che il corpo della risposta è stato letto, il HttpURLConnection dovrebbe essere chiuso chiamando disconnessione().  Questa  disconnessione rilascia le risorse detenute dalla connessione in modo che possano essere chiusi o riutilizzati.

vedi su android reference HttpURLConnection


private String getJSONString(String strUrl){
  InputStream is = null;
  URL url = null;
  BufferedReader br = null;
  StringBuilder sb = new StringBuilder();
   HttpURLConnection conn = null;
  String jsonString = null;
  try {
      url = new URL(strUrl);
      conn = HttpURLConnection)url.openConnection();
      //set the timeout in milliseconds
      conn.setReadTimeout(15000);
      //set the timeout in milliseconds
      conn.setConnectTimeout(15000);
      conn.setRequestMethod("GET");
      conn.setDoInput(true);
      conn.connect();

      // Log.d("-----url 1 ", String.valueOf(url));
      int response = conn.getResponseCode();
      is = new BufferedInputStream(conn.getInputStream());
      //Log.d("!!!!!!!!is  2", String.valueOf(is));
      br = new BufferedReader(new InputStreamReader(is));
      byte[] b = new byte[1024];
      // to implement try catch…
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      //readstream
      while ( is.read(b) != -1) {
        baos.write(b);
      }
      //Log.d("+sb 3 ", String.valueOf(sb));
      //String JSONResp= new String(baos.toByteArray());
       byte[] data1 = baos.toByteArray();
      // to implement try catch…
      jsonString = new String(data1);
      //Log.d("JSON jsonSTRing  ", jsonString);
      //call parse json data
       myFlag = parseJson(jsonString);
  } catch (MalformedURLException e) {
       e.printStackTrace();
  } catch (java.net.ProtocolException e) {
       e.printStackTrace();
  } catch (IOException e) {
       e.printStackTrace();
  }finally{
      if(br!=null){
          try {
              br.close();
              is.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
          if(conn!=null) {
              conn.disconnect();
          }
      }
  }
  return jsonString;
}

Applicazioni Android con REST client, API ed altro

In questo post vorrei approfondire le tematiche necessarie per comprender meglio la filosofia e  l’importanza degli  web services nello lo sviluppo ottimale delle applicazione Android mobile.  attraverso una serie di collegamenti esterni (links) porterò il lettore ad una più consapevole conoscenza della tematica esposta qui.

json-rest3

#appissue

è importante ricordare che una connessione RESTful web service è una simple connessione a un URI attraverso l’oggetto HttpURLConnection  e anche la parserizzazione (analisi e interpretazione secondo determinate regole)  dei dati della risposta.

 

 

una lista di siti di interesse:

libri:

android: aggiornare un archivio lato server con richieste POST dal lato client

android_linee_guida android_topics android_codice_esempio
android_linee_guida android_topics android_codice_esempio

come  aggiornare un archivio lato server con richieste POST dal lato client ?

 
 SERVER SIDE SCRIPT PHP
<?php
$messaggio=$_POST["message"];
$nomeArchivio="ricevutodaApp.html";
file_put_contents($nomeArchivio,$messaggio."<br />",FILE_APPEND);
$androidMess=$file_get_contents($nomeArchivio);
echo $androidMess;
?>

 vedi file_put_contents in php

LATO CLIENT – LATO APP – file .java

//import fondamentali per gestire http
import 
org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
//una edit test per leggere da app il messaggio //da inviare al Server EditText
 msgTextField
;

//leggere il messaggio da inviare al Server String mess = msgTextField.getText().toString(); 
if(mess.length()>0) {
 HttpClient clientAndr = new DefaultHttpClient();
 HttpPost   postHeader = new HttpPost 
            ("http://www.sito.it/PhpScript.php");
 try { 
   List<NameValuePair> coppieValori =  new    ArrayList<NameValuePair>(2);  
//
   coppieValori.add(new
   BasicNameValuePair("id","11116"));  
//
   coppieValori.add(new
   BasicNameValuePair ("message",mess));  
//
    postHeader.setEntity(new
    UrlEncodedFormEntity(coppieValori));  
//
    clientAndr.execute(postHeader);    //msgTextField.setText(""); 
// re inizializzare la variabile
 
catch(ClientProtocolException e)
  {
   // ....
  }
catch(IOException e)
  { 
   // ...
  } 
}else
{ 
  // messaggio di errore se non c'è dato   Toast.makeText(getBaseContext(), "dati   richiesti",Toast.LENGTH_SHORT).show();}
} 

collegamenti fondamentali per approfondire:
HttpClient
HttpPost
vedi .BasicNameValuePair

vedi http.client.methods
UrlEncodedFormEntity
Fonte1 webtutsdepot.com:
Fonte2 androidsnippets.com
F
onte3 mobiledevtuts.com-task asincrona

  articolo relazionato android i 4 famosi del Http

image di doscadesa
image di http://www.doscadesa.com/index.php/category/productos/especias/?lang=es&lang=es

 

app mobile ibrida web o nativa le ragioni di una scelta

Già dai primi momenti in cui si decide di sviluppare una App mobile, ci si deve confrontare con il dover scegliere se essa sarà di tipo Nativo, Web o Ibrido ?

app nativa web ibrida
app nativa web ibrida

Si rende utile allora capire cosa sono le Mobile app.
Le mobile app sono programmi software sviluppati espressamente per essere installati nei dispositivi mobili chiamati oggi smartphone, tablet, PDA o altri mobile gadgets, sono piccoli applicativi software “specifici e specialistici” che rendono possibile ad un particolare utente, in determinati momenti, la sua connessione permanente con il web, la posta elettronica, i social, il proprio pc, il cloud, società di servizi ecc… (esiste anche la possibilità di utilizzare mobile app off-line).

Queste App sono gestite da un sistema operativo mobile Android, Blackberry, iOS, Windows Phone, Firefox OS, OS Sailfish, Symbian, Tizen, Ubuntu touch OS, Canonical Ltd. e possono svolgere una molteplicità di funzioni utilizzando le caratteristiche tecniche del proprio dispositivo: GPS di navigazione portatile, macchina fotografica, videocamera, riconoscimento vocale, registratore vocale, lettore musicale, Near Field Communication e blaster a infrarossi, touchscreen, cellulare, Bluetooth, Wi-Fi.

a questo punto viene chiaro a noi sviluppatori il chiedersi ma con quale di tutti questi sistemi operativi è meglio iniziare il processo di sviluppo della mobile app ?
la risposta è una nuova domanda, nell’ albero decisionale,  si vuole sviluppare una mobile app uni-piattaforma o multi-piattaforma ?

se la risposta è la prima si chiamano mobile App native, se è  la seconda si possono chiamare web mobile app… ma se è una combinazione di tutte le due decisioni si chiamano mobile app ibride.

ma quali le ragioni di una o altra scelta programmatica ?
la risposta la dà il marketing,  gli studi di mercato, la reale conoscenza del comportamenti di acquisto degli utenti delle app,  le tendenze del mercato….  oggi è ovvio sviluppare mobile App Native per il Mondo Android, iOS, e Blackberry e Windows Phone …

chi deve sviluppare o decidere deve pensare a … 4 sistemi operativi diversi !!!, quattro applicativi differenti, utilizzo di tecnologie per ogni piattaforma diverse e complesse, quasi quasi si ha la necessità di 4 esperti diversi, con conoscenze tecniche specifiche per ogni ambiente di sviluppo… ovvero Objective-C per iOS, Java per Android e. NET per Windows.  con tempi e costi da non sottovalutare…

allora arriva un dubbio ma come lasciare fuori il mercato trainato da Firefox OS, OS Sailfish, Symbian, Tizen, Ubuntu touch OS, Canonical Ltd ?

si tende a pensare alle soluzioni web e ibride che offrono oggi gli studiosi di HTML5 CSS3 e Javascript MVC. Molte soluzioni che emulano la visualizzazione della web app attraverso i browser. Sistemi che interpretano web view. Ambienti di sviluppo che creano una sola SOLUZIONE… Cross-platform che permettono di farle girare in tutte le piattaforme mobile (o cosi predicano…) senza grandi problemi di adattamento…

si è catapultati  allora in un approfondito studio su tutti i  toolkit mobili cross-platform un vero conglomerato… quasi infinito di soluzioni per  trovare LA unica SOLUZIONE … una App ibrida  (vedi Phonegap, AngularJs, Titanium, todoMVC, emberjs, backbone ecc..)  tutti con un minimo comune denominatore … quello di offrire una soluzione quasi miracolosa. che funziona uguale (o quasi) su tutte le piattaforme mobile.

viene da credere che questi tools di sviluppo siano caduti dal cielo … e anche che essi siano facili da apprendere, da utilizzare o si tende a credere che la curva di apprendimento sia corta… ma non è così .

che la mobile  App sia  ibrida web o nativa, il gruppo di lavoro, gli, analisti e gli sviluppatori, deveno conoscere molto bene il proprio mercato, le necessità del mercato obiettivo,  le specificità della app che si vuole sviluppare, la propensione al acquisto di apparecchiature mobile come iphone, android, winphone, o blackberry dei futuri utilizzatori e sopratutto del’utilizzo che farà l’utente della mobile app… sia in termini del dove, del come e del quando … mobile in movimento…

concludendo posso dire che  ci sono mobile app che è definitivamente necessario sviluppare in ambiente nativo (si pensi alla propria interazione con la piattaforma hardware, la connettività on-line off-line, la relazione con i meccanismi di gps, geo,ecc)….  altre che va bene sviluppare in ambiente web … per la facilità di reperimento dei dati on line, per le potenzialità che offrono oggi i browser, i linguaggi come html, la gestione diretta dei dati nei server, le web services (REST) e  i nuovi formati dati come  json, sqlite ecc… e infine ci sono mobile app che vanno bene sviluppate come ibride (con una architettura che unisce caratteristiche delle app native a delle web app… in fondo sono  nativa che sfruttano il web per adattarsi alle diverse piattaforme e ai diversi mobile devices).
… addirittura negli ultimi giorni c’è la tendenza di fare coesistere nei market o store le  App in due soluzioni …native e ibride.


 

collegamenti

vargas carmen
autor