Resumen: Martes 22 en #Ficod (Parte1)

He estado durante los primeros días de FICOD, asistiendo a unos cuantos seminarios y talleres. Voy a crear un resumen de lo mas interesante que me ha parecido de cada una de las sesión. Para lo que no sepáis que es FICOD, clickar aquí

Se ha celebrado durante los dias 22,23 y 24 de noviembre de 2011 en Madrid

Ponencia Tim O’Reilly:
La ponencia inagural del congreso la realizo Tim O’Reilly, dueño de la que muchos consideran la mejor editorial de libros de informática del mundo y creador del concepto Web 2.0. Seguro que de esta charla hay muchisimos resumenes, asi que os dejo una imagen que han creado con todo lo que conto:

Tecnologías Inmersivas y Gamificacion: Tendencias, Oportunidades y Desafios:
Este seminario la verdad que no fue lo mejor que vi. Para mi gusto demasiado filosofal, nos conto su vida David Wortley, nos conto que todo son retos y que todos necesitamos satisfacer nuestro ego. Algo de informacion interesante que pude rescatar:
–  La actividad en el subsector de los “juegos serios” crecerá un 47 % anual hasta 2015
– Conceptos clave: atractiva, accesible y asequible
– Realizar actividades o hobbys sin tener necesidad de estar en el contexto: ejemplo la utilización de Wii Sports o de Guitar Hero.
– Aprender mientras juegas: ejemplo una aplicación de primeros auxilios

Innovación a través de la Colaboración:
Esta presentacion la realizo Gilberto Garcia, quien es el director de innovacion mundial de CEMEX. Es una compañía de cementos y cuenta con 50 000 empleados alrededor de todo el mundo. Esta presentación estuvo genial. Se centro sobre todo en como aprovechan una herramienta colaborativa para innovar dentro de la empresa.
– ¿Porque utilizar la tecnología en una empresa de construcción?
La tecnologia social esta revolucionando el mundo, tenemos que aprovecharla para que se expresen los empleados, habilitando nuevos caminos para hacer negocios. Objetivo: aprovechar el conocimiento de los 50 000 empleados
– ¿Como fomentar la innovación?
Es necesario primero fomentar la colaboración, utilizando herramientas para solventar los cambios de horarios (ej: Europa y Sudamérica), ser cercanos a todos que se sientan todos importantes y por ultimo, lo mas importante, recompensar las ideas.
– ¿Como crear la red de colaboración?
Creando foros globales cada uno con temas y subtemas diferentes, la gente crea una entrada con una idea y los demas envian su feedback refinando esa idea.

– La herramienta
CEMEX creo la herramienta SHIFT , esta es su plataforma colaborativa en la cual han creado un cambio global en la empresa adoptando nuevas practicas. Todos los documentos importantes, presentaciones se cuelgan en la plataforma para que el resto las pueda utilizar, las pueda evaluar, etc. Únicamente se mantienen en secreto cuando son objeto de alguna patente.

Se busca la actividad de las personas dentro de la red. Se segmentan las personas en las que son proactivas y las que no le ven sentido y se intenta hacer lo posible para hacerles entender a estos últimos la necesidad y todo lo que aporta la plataforma.

La plataforma ha sido creada a partir de IBM Connection, es multiplataforma y se han generado un monton de modulos que se han integrado posteriormente y poco a poco con el sistema.

– Claves de negocio
– Nuevas propuestas de valor para servir mejor a los clientes
– Tendencias en la construcción del siglo XXI
– Desarrollo de nuevos productos especiales
– Uso de combustibles alternativos
– Proyectos de infraestructuras

– Resultado
Una empresa agil, eficiente y globalmente integrada, donde tiene cabida una discusion entre el gran jefe y un empleado, todos son iguales en el sistema

Posted in Ponencia, Tecnologia | Leave a comment

Curso iOS de Stanford ¡Gratis!

Aqui tenemos un nuevo curso de stanford sobre iOS. Se esta celebrando actualmente y graban cada una de sus clases para subirlas a iTunes.

Aquí todos las clases para descargar:
http://itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255

Posted in iPhone | Leave a comment

Suecia y Korea, dos países emergentes con Android

Grafica donde Suecia es el pais con mayor descargar por mesNumero total de aplicacion mas de 300mil

grafica donde se muestra korea con mas descargas en el mundo Android

Mas info: http://www.research2guidance.com/

Posted in Android | Leave a comment

Solución a Exception de Android: java.lang.OutOfMemoryError: bitmap size exceeds VM budget

Este post quiza sea demasiado especifico para crear con él una nueva entrada, pero creo sinceramente que se lo merece. Este problema, o excepcion que saltaba en uno de mis juegos, me ha quitado varias decenas de horas de mi vida, así que espero poder evitar este perdida a muchos de vosotros.

Explicacion del problema:

Esta exception salta, cuando se cargan demasidas imagenes dentro de una aplicacion android. El limite medio de una aplicacion esta entre 16Mb y 24Mb dependiendo del dispositivo. Cuando se soprepasa el limite la maquina dalvik fuerza el cierre de la aplicacion y en el logCat obtenemos algo parecido a esto:

11-12 18:15:01.932: D/dalvikvm(411): GC_FOR_MALLOC freed 4K, 50% free 3523K/6919K, external 16605K/17130K, paused 70ms
11-12 18:15:01.962: D/skia(411): --- decoder->decode returned false
11-12 18:15:01.972: D/AndroidRuntime(411): Shutting down VM
11-12 18:15:01.972: W/dalvikvm(411): threadid=1: thread exiting with uncaught exception (group=0x40015560)
11-12 18:15:02.042: E/AndroidRuntime(411): FATAL EXCEPTION: main
11-12 18:15:02.042: E/AndroidRuntime(411): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
11-12 18:15:02.042: E/AndroidRuntime(411): 	at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
11-12 18:15:02.042: E/AndroidRuntime(411): 	at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:470)

En este caso podemos apreciar que cuando la memoria externa ha llegado a 17Mb es cuando el sistema se viene abajo. Te recomiendo que leas mi post sobre gestion de memoria para que entiedas los mensajes. Normalmente es un fallo que salta en aplicaciones con alta carga en imágenes.

Tras probar con cientos de soluciones que he encontrado en la web, llege a la conclusion que ninguna por si sola resolvia mi problema, asi que optimice al maximo mi aplicacion e hice un remix de todas ellas. Asi se soluciono el problema

Solución del problema:

1) En el método onDestroy de cada Activity, es necesirio liberar todos los elementos que se estan utilizando en el sistema. He aqui un ejemplo:

 @Override
protected void onDestroy() {
	    super.onDestroy();
	    this.liberarMemoria();
}
public void liberarMemoria(){
     imagenes.recycleBitmaps();  // <-- esta llamada la voy a explicar a continuación
     this.unbindDrawables(.....vista que deseamos eliminar......);
      //Cerrar cualquier tipo de conexion, webservices, bd, etc...
      //asignar todos los elementos que usamos a NULL
}
 private void unbindDrawables(View view) {
		    if (view.getBackground() != null) {
		        view.getBackground().setCallback(null);
		    }
		    if (view instanceof ViewGroup) {
		        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
		            unbindDrawables(((ViewGroup) view).getChildAt(i));
		        }
		        ((ViewGroup) view).removeAllViews();
		    }
}

2) El segundo paso es eliminar todas las asignaciones a imágenes como R.drawable.nombreImagen y crearnos un gestor propio de imágenes. Android tiene un bug desde su nacimiento y no gestiona de manera optima las imágenes, en la mayoría de las aplicaciones no hay problema, pero en algunos casos hay que replantearnos la utilización de su gestor.

a) Trasladar todas las imagenes desde la carpeta “\res\drawable-hdpi” a una carpeta que crearemos dentro de assets, tal como “\assets\drawable”

b) Copia esta clase en tu proyecto

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

public class Imagenes {

	  private HashMap> mBitmaps;

          public WeakReference getAssetImage(Context context, String filename){
		//WeakReference tempbitmap = new WeakReference(BitmapFactory.decodeStream(inputStream));
		InputStream is=null;
		AssetManager assets;
		WeakReference bitmap=null;
		try{
			if(mBitmaps==null)mBitmaps=new HashMap>();
			assets = context.getResources().getAssets();
		    is = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
		    bitmap = new WeakReference(BitmapFactory.decodeStream(is));
		    mBitmaps.put(filename,bitmap);
			is.close();
			WeakReference tempDW = new WeakReference(new BitmapDrawable(bitmap.get()));
		    return tempDW;
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			is = null;
			bitmap=null;
		}
		return null;
	}

	public void recycleBitmaps() {
		Iterator itr = mBitmaps.entrySet().iterator();
        while (itr.hasNext()) {
            Map.Entry e = (Map.Entry)itr.next();
            System.out.println("Eliminar:"+e.getKey());
            if(((Bitmap) mBitmaps.get(e.getKey()).get())!=null){
            	((Bitmap) mBitmaps.get(e.getKey()).get()).recycle();
            }
        }
        mBitmaps.clear();
    }

}

c) Cambia todas las llamadas a una imagen

Antes: R.drawable.nombreImagen;

Ahora: Imagenes.getAssetImage(mContext.getApplicationContext(), “nombreImagen”).get();

d) Crea una instancia de Imagenes en cada onCreate de cada Activity

public Imagenes imagenes;
@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		imagenes = new Imagenes(true);

e) La siguiente linea en el AndroidManifest de cada Actividad, mejorara el rendimiento

android:configChanges="orientation|keyboardHidden|navigation"

f) por ultimo optimiza, optimiza y vuelva a optimizar tu codigo

Destacar que bajo mi punto de vista la clave de la solucion es en crear un gestor propio de imagenes que utilice WeakReference

Posted in Android | 10 Comments

Gestión de Memoria en Android, Entendiendo Memory leaks

En la mayoría de aplicaciones Android no es necesario tener excesivo cuidado con la gestión de memoria, el GC(Garbage Collector) se encarga por nosotros de ir eliminando todos los elementos que han muerto en la aplicación. Esto no ocurre en otros lenguajes por ejemplo cuando se desarrolla una aplicación en iOS, donde eres el desarrollador el encargado de gestionar la memoria de cada elmento, reservando su espacio y liberandolo cuando ya no sea necesario.

¿Que es el GC(Garbage Collector)?

Es un sistema que automatiza la gestión de la memoria. Reservando cuando es necesaria, eliminando cuando ya no se usa, compactando cuando es mejor agruparla. La maquina dalvik de Android implementa un GC mas sencillo que el de java pero que es muy util.

Entonces ¿Que problema existe?

La manera en que trabaja Android, tiene parte buena y parte mala. La automatización de la gestión de memoria, hace que cuando te encuentras con un problema de desbordamiento o fuga de la pila de memoria, su solucion no es facil. Cuando estas desarrollando un juego o una aplicacion que requiere cargar en memoria muchas imagenes o un procesado de computacion alto, tienes que tener muchisimo cuidado, al menor despiste te encuentras con problemas. Yo ahora mismo estoy intentado resolver, en uno de mis juegos, un fallo “java.lang.OutOfMemoryError: bitmap size exceeds VM budget”.

Si me encuentro con un OutOfMemoryError, ¿Que puedo hacer?

1) Aprende a leer los mensajes del GC: Es muy importante conocer como esta funcionando el GC y que representa cada mensaje. Hay 5 tipos de mensajes:
– GC_CONCURRENT: Se activa cuando es necesario liberar memoria. De esta manera, se libera memoria antes de que haya una necesidad real, evitando hacer una pausa y llamar a la GC.
– GC_FOR_MALLOC: Significa que el GC fue disparado porque no habia suficiente memoria en la pila para realizar una asignacion. Puede ser activado cuando nuevos objetos estando siendo creados. Se activa cuando la pila está llena y tenemos que parar y esperar a que el GC para liberar memoria.
– GC_EXTERNAL_ALLOC: Significa que la VM esta intentando reducir el monton de memoria utilizado por coleciones de objetos, para hacer espacio para objetos que no son de colección como Bitpmap o buffers NIO.
– GC_HPROF_DUMP_HEAP: Si recoges la pila para examinarla
– GC_EXPLICIT: Cuando realizas una llamada explicita a “System.gc()”

Ahora que sabemos los tipos de mensajes, vamos a interpretar uno de ellos. Supongamos que en el LogCat hemos Obtenido:
D/dalvikm (9050): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703/5261, paused 2ms+2ms

Explicación: Acaba de liberarse 2049K, esta libre el 65% de memoria. Lo siguiente refiere a la memoria externa, el primer numero(3571) es el total de memoria externa que la aplicacion tiene alojada(imagenes y buffers NIO), el segundo número es una especie de límite flexible, que va aumentando segun las necesidades, hasta un punto limite segun la memoria de cada dispositivo. Finalmente el tiempo que ha consumido el GC en sus tareas.

2) Aprende a descargar el fichero hprof desde las herramientas DDMS, conviertelo a un formato valido y aprende a utilizar Eclipse Memory Analyzer

Yo estoy en proceso de aprendizaje con esta poderosa herramienta, asi que de ella tampoco podre aprotar demasiado, pero si como llegar hasta ella.
En primer lugar lanzamos la aplicacion Android en modo “debug” y nos vamos a la vista DDMS. Probamos la aplicación por sus diferentes partes, hasta que obtenemos un fallo o no necesariamente. Ahí seleccionamos en la pestaña “Devices” el proceso sobre el que corre nuestra aplicación y pulsamos el botón que podéis ver en la siguiente captura.

imagen del boton que hay que pulsar, se llama DUMP HPROF fileGuardamos el fichero que nos genera, con el nombre “dump.hprof” .Tras ello, tenemos que convertir el fichero que hemos guardado en otro formato, vamos con un terminal a donde tenemos el sdk de android y luego a la carpeta tools y hacemos lo siguiente:

$ hprof-conv dump.hprof dump-conv.hprof

Ya podemos abrir ese fichero generado (dump-conv.hprof) con MAT(Eclipse MemoryAnalyzer)

Si quieres aprender a dar tus primeos pasos en Eclipse MemoryAnalyzer y conocer mas cosas sobre la gestion de memoria en Android, te recomiendo que veas esta ponencia de unos de los ingenieros de google celebrada a mediados de 2011.

Espero postearos pronto nuevos trucos sobre la gestión de memoria en Android!

Posted in Android | 5 Comments

WebServices: SOAP vs REST: ¿Cual usar en cada caso?

Llevo prácticamente dos años, desde que empece en mi ultimo trabajo, estudiando servicios web y arquitecturas orientadas a servicios. Hasta el momento he creado arquitecturas SOA utilizando BPM (Business process management) para la comunicación e interoperabilidad de diferentes servicios(principalmente de tipo SOAP) con que cuenta cada sistema, y de esta forma creando la logica intermedia que es necesaria en cualquier infrastructura global de servicios.

imagen decorativa

Yo mismo me hago la pregunta cuando necesito crear un nuevo servicio web, ¿Que tipo de servicio crear? Por un lado me empuja mi mente estructura a pensar en servicios SOAP, donde tienes todo muy organizado, creas tu propio XSD, generas el WSDL y con dos click en el entorno de desarrollo tienes creado tu servicio web a la medida. Por otro lado me tira la tendencia actual del mercado, REST coge fuerza en detrimento de SOAP, todas las APIs importantes utilizando servicios REST (twitter, flickr, google, etc.), los framework javascript que conozco están en pleno auge con sus peticiones hacia servicios REST (jquery, mootools, etc.).

Empecemos por el principio: ¿Que es un servicio SOAP y un servicio REST?
SOAP:
– SOAP (siglas de Simple Object Access Protocol) es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML
– Las operaciones son definidas como puertos WSDL
– Dirección única para todas las operaciones
– Componentes fuertemente acoplados
– Múltiples instancias del proceso comparten la misma operación
REST:
– Es un estilo de arquitectura de software para sistemas hipermedias distribuidos tales como la Web. Se centra en los estándares HTTP y XML
– Paradigma creado en la tesis doctoral de Roy Fielding en 2000, quien es uno de los principales autores de la especificación de HTTP.
– REST se refiere únicamente a una colección de principios para el diseño de arquitecturas en red que se centran en como los recursos son definidos y diseccionados.
– El objetivo principal es transmitir un conjunto de datos de un domino sobre el protocolo HTTP sin la necesidad de contar con una capa adicional, como hace SOAP.
– Las operaciones se definen como mensajes
– Una dirección única para cada instancia del proceso
– Componentes débilmente acoplados

¿Donde es mejor utilizar SOAP?
– Cuando se establece un contrato formal donde se describe todas las funciones de la interfaz.  El lenguje WSDL(Web Services Description Language) nos permite definir cualquier detalle.
– Cuando es necesario que la arquitectura aborde requerimientos complejos no funcionales.Por ejemplo en el uso de transacciones, seguridad o direccionamiento, casos donde es necesario mantener la información contextual y el estado.
– En casos donde la arquitectura necesita manejar un procesado asíncrono debido al tiempo que necesita para realizar una parte del procesado de la petición.

¿Donde es mejor utilizar REST?
– Cuando el servicio web no necesita tener estado.
– Cuando buscamos mejorar el rendimiento, una infraestructura caching puede mejorarlo.
– En momentos donde el productor como el consumidor conocen el contexto y contenido que van a intercambiar.
–  REST es muy util para el consumo como servicio web en dispositivos moviles donde tenemos escasos recursos.
– REST es un acierto en la creación de servicios que se utilizaran de agregadores de información en mashup o sitios web existentes. También cuando usemos tecnologías como AJAX o framewoks javascript.

¿Estado actual del mercado, a nivel de APIs?

grafico de utilizacion de servicios web, rest 71 por cientoReferencia de la imagen

Posted in Arquitectura SOA, WebServices | 5 Comments

Tips Android #2

3) Estilos independientes dentro de un TextView: Hay momentos en los que se desea dar formatos diferentes a un secciones de un textview

TextView tv = new TextView(this);
SpannableString s = new SpannableString("Hello there world");
CharacterStyle mark = new StyleSpan(Typeface.BOLD);
s.setSpan(mark, 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(ssb);

4) Pasar de una actividad a otra de manera elegante, utilizando un efecto tipo Alpha (Transparencia): sino utilizas ningun efecto te daras de cuenta que al pasar de una actividad a la siguiente no tiene un efecto de continuidad y es demasiado rompedor. Te propongo una solucion:
Crear dos ficheros dentro de la carpeta res/anim
fichero1: fadein.xml

<?xml version=”1.0″ encoding=”utf-8″?><alpha xmlns:android=”http://schemas.android.com/apk/res/android”   android:interpolator=”@android:anim/accelerate_interpolator”   android:fromAlpha=”0.0″ android:toAlpha=”1.0″ android:duration=”1000″ />

fichero2: fadeout.xml

<?xml version=”1.0″ encoding=”utf-8″?><alpha xmlns:android=”http://schemas.android.com/apk/res/android”   android:interpolator=”@android:anim/accelerate_interpolator”   android:fromAlpha=”1.0″ android:toAlpha=”0.0″ android:duration=”1000″ />

En la Actividad A, hacemos la llamada de manera normal:

Intent i = new Intent(ActividadA.this,ActividadB.class);
startActivity(i);						
finish();

En la Actividad B, en el metodo OnCreate:

@Override
public void onCreate(Bundle savedInstanceState) {
// Transacion entre dos actividades
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
setContentView(R.layout.vista1);
}

Así habremos logrado el objetivo de pasar entre ambas actividades de manera continua.

Posted in Android | Leave a comment

Libro Sobre Aplicaciones Moviles de la MMA, ¡Gratuito!

Aqui os dejo el enlace para que os descargueis el libro blanco sobre aplicaciones moviles de la MMA (Mobile Marketing Association). Acaba de ser editado hace pocos dias y hace un estudio en profundidad a alto nivel sobre que es una aplicación, que categorias existen, por donde empezar para crear tu propia aplicacion o consejos muy interesanes.

Os lo podéis descargar desde aquí: Libro Blanco Aplicaciones (PDF)

Posted in Android, iPhone, Tecnologia | Leave a comment

OSM:OpenStreetMap ¿Mejor que Google Maps?

La verdad que nunca pensé que escribiría esto, pero Google Maps me esta haciendo que pensar. Ha sido la herramienta en la cual me he apoyado siempre que quería buscar información de una ubicación, la herramienta que he utilizado para desarrollar algun producto, era la única herramienta que me convencía… lo demas eran burdas y regulares imitaciones.

Hace dias llegue a una noticia que me sorprendió: La API de Google Maps dejara de ser gratuita

De ahi que empezo a rondar en mi cabeza la siguiente duda: ¿Hay que usar la API de Google Maps para futuros proyectos? ¿Merece la pena? Yo de momento sigo pensado que sigue siendo la mejor herramienta pero ¿lo seguirá siendo o habrá alguna que le adelante?

Tras varias investigaciones llegue a la conclusión de que si alguien le esta haciendo frente es OpenStreetMap que segun la wikipedia es “Un proyecto colaborativo para crear mapas libres y editables. Los mapas se crean utilizando información geográfica capturada con dispositivos GPS móviles, ortofotografías y otras fuentes libres. Esta cartografía, tanto las imágenes creadas como los datos vectoriales almacenados en su base de datos, se distribuye bajo licencia Creative Commons Attribution-ShareAlike 2.0.” En cristino es algo muy parecido a la wikipedia pero de mapas. Tienes el poder de editar, personalizar y utilizar by the face.

Hay un movimiento muy fuerte que se esta produciendo en españa con esta nueva tecnologia, podeis seguir sus pasos en esta interesante Web

¿Porque no utilizar Google Map?
– Prohibido el uso comercial
– Solo para uso personal
– No redistribuible
– Solo a través de su API
– Prohibido descargar
– Prohibido modificar
– Prohibido navegar
– !Prohibido mejorar¡
– ¡Prohibido ser creativo!

¿Porque Utilizar OpenStreetMap?
– Usalo como quieras, incluso comercialmente
– Usalo donde quieras
– Es Gratis
– Contribuye
– Mejora
– Sé Creativo

Ejemplos de uso:

¿Como puedo contribuir a esta iniciativa?
– Usando y difundiendo su uso
– Avisando de errores: OpenStreetBugs
– Pidiendo a las instituciones la liberacion de sus datos: OpenData
– Editando directamente el mapa tu mismo ¡Es facil y divertido!

Si os ha interesado toda esta informacion, os recomiendo estos links:
http://www.openstreetmap.es/
http://www.openstreetmap.es/wp-content/uploads/osmdeusto2011/introduccion/#slide40

Posted in Android | 2 Comments

Llamar a un servicio Web SOAP desde Android

Parece una tarea facil, pero a la hora de intentarlo salen cantidad de problemas, de los cuales no es facil encontrar respuesta.A dia de hoy la mayor parte de organizaciones utilizan los servicios web REST para comunicarse, pero siempre es posible que queramos conectarnos a un servicio con protocolo SOAP, ya sea nuestro o de un tercero.
La libreria mas conocida para realizar la comunicación entre nuestra aplicación y este tipo de servicios es kSoap

Me he descargado la libreria y he creado un ejemplo para compartirlo con todos vosotros. En primer lugar he buscado un WebService abierto por la web y he dado con este: http://ws.cdyne.com/psaddress/addresslookup.asmx
Cuenta con un monton de servicios, asi que para esta este ejemplo, he recuperado el mas sencillo de todos, es decir CCServerCheck, el cual devuelve un String tras su invocacion.

Tras crear el proyecto android, los pasos que he seguido han sido:
1. Habilitar comunicaciones de Internet con el dispositivo o emulador desde el fichero AndroidManifest. Tal como

uses-permission android:name="android.permission.INTERNET"

2. Incluir la libreria kSoap en el proyecto

3. Buscar los datos necesarios para la comunicacion y crear una variable con cada uno de ellos. Tal como:

private static final String SOAP_ACTION = "http://ws.cdyne.com/CCServerCheck";
private static final String METHOD_NAME = "CCServerCheck";
private static final String NAMESPACE = "http://ws.cdyne.com/";
private static final String URL = "http://ws.cdyne.com/psaddress/addresslookup.asmx";

3. Crear el canal para la comunicación y recuperar la respuesta, en este caso un SoapPrimitive (al ser la respuesta un unico String)

try {
        String resultadoFINAL;
        //Creaccion de la Solicitud
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		//Creaccion del Envelope
		SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		sobre.dotNet = true;
		sobre.setOutputSoapObject(request);
		//Creaccion del transporte
		HttpTransportSE transporte = new HttpTransportSE(URL);
		//Llamada
		transporte.call(SOAP_ACTION, sobre);
		//Resultado
		SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();
		resultadoFINAL = resultado.toString();

        }catch (Exception e) {
        }

Os dejo el código por si teneis alguna duda.

Posted in Arquitectura SOA, WebServices | 4 Comments