<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jon Segador &#187; Android</title>
	<atom:link href="http://jonsegador.com/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonsegador.com</link>
	<description>Desarrollador web y android, con todo lo que ello implica</description>
	<lastBuildDate>Mon, 23 Jan 2012 19:24:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Aplicación Cercanías Renfe para Android liberada como open source</title>
		<link>http://jonsegador.com/2012/01/aplicacion-cercanias-renfe-para-android-liberada-como-open-source/</link>
		<comments>http://jonsegador.com/2012/01/aplicacion-cercanias-renfe-para-android-liberada-como-open-source/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 09:55:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Proyectos propios]]></category>
		<category><![CDATA[apk]]></category>
		<category><![CDATA[código abierto]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[renfe]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=645</guid>
		<description><![CDATA[Como anunciaba en el post anterior (Me han suspendido la aplicación de Cercanías Renfe para Android) he liberado el código fuente de la aplicación Cercanías Renfe para dispositivos Android. Así mismo, también se puede descargar el fichero .apk de la aplicación e instalarla directamente es vuestros móviles, tablets, etc. Descárgar la aplicación (fichero .apk) Explorar [...]]]></description>
			<content:encoded><![CDATA[<p>Como anunciaba en el post anterior (<a href="http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/">Me han suspendido la aplicación de Cercanías Renfe para Android</a>) he <strong>liberado el código fuente</strong> de la aplicación Cercanías Renfe para dispositivos Android.</p>
<p>Así mismo, también se puede <strong>descargar el fichero .apk de la aplicación</strong> e instalarla directamente es vuestros móviles, tablets, etc.</p>
<ul>
<li><a href="http://jonsegador.com/cercanias/app/Renfe.apk">Descárgar la aplicación (fichero .apk)</a></li>
<li><a href="https://github.com/jonseg/cercanias-renfe-android">Explorar el código fuente (Github)</a></li>
</ul>
<p>El <strong>único requisito</strong> para utilizar el código fuente y crear tu propia aplicación, es que sea <strong>liberada como código abierto</strong>. Nada más.</p>
<p>El código no está excesivamente documentado, quizás haga un tutorial en mi blog explicando paso a paso como funciona la aplicación.</p>
<p>Una vez más, gracias a todos por los ánimos y el apoyo recibido. <strong>¡GRACIAS!</strong></p>
<p>Pd.: Si decides crear tu propia aplicación o reutilizar el código, deja un comentario!</p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2012/01/aplicacion-cercanias-renfe-para-android-liberada-como-open-source/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Me han suspendido la aplicación de Cercanías Renfe para Android</title>
		<link>http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/</link>
		<comments>http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 15:03:09 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Opinión personal]]></category>
		<category><![CDATA[Proyectos propios]]></category>
		<category><![CDATA[aplicación]]></category>
		<category><![CDATA[renfe]]></category>
		<category><![CDATA[suspendida]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=619</guid>
		<description><![CDATA[2 años, 100.730 instalaciones totales y 51.896 instalaciones activas. Eso es lo que ha durado mi aplicación de Cercanías Renfe para Android. Ayer, día 3 de enero, recibo un email de Google informándome de que &#8220;mi aplicación vulnera los derechos de propiedad industrial de RENFE-Operadora&#8221; y había sido suspendida. Concretamente por la utilización inconsentida de [...]]]></description>
			<content:encoded><![CDATA[<p><strong>2 años, 100.730 instalaciones totales y 51.896 instalaciones activas.</strong> Eso es lo que ha durado mi <a href="http://jonsegador.com/2010/01/horarios-de-trenes-de-cercanias-renfe-en-tu-movil-android/">aplicación de Cercanías Renfe para Android</a>.</p>
<p>Ayer, día 3 de enero, recibo un email de Google informándome de que &#8220;mi aplicación vulnera los derechos de propiedad industrial de RENFE-Operadora&#8221; y había sido suspendida. Concretamente por la utilización inconsentida de sus signos distintivos, lo que constituye un acto de competencia desleal.</p>
<p><strong>¿Competencia desleal?</strong> Es cierto que utilizo el logotipo de Cercanías como imagen de la aplicación, pero de ahí a ser competencia desleal&#8230; Como bien dijo <a href="http://twitter.com/#!/nacmartin/status/154304390474383360">@nacmartin</a> en Twitter: &#8220;Serías competencia si tuvieras tu propia red ferroviaria.&#8221;</p>
<p>El email que recibo proviene de Google pero, no sé si por error, puedo leer el mensaje que el abogado de Renfe (se le puede encontrar fácilmente en Linkedin) envía a Google y es ahí donde puedo leer lo de competencia desleal (ya que Google ni lo menciona). <strong>El mensaje que envía es un copy&#038;paste</strong> clarísimo, con tres párrafos donde se repite lo mismo con diferentes palabras.</p>
<p>No me gusta que <strong>Google haya suspendido la aplicación sin yo poder defenderme</strong> de ninguna manera. Si es por utilizar el logotipo de Cercanías, podría haber modificado la aplicación y subir otro logo, por ejemplo el de un tren parado en mitad de la vía (sería una buena representación de los trenes de Cercanías de Renfe).</p>
<p>No puedo modificar la aplicación ni tampoco realizar ninguna acción sobre ella: descargar el código, descripciones, etc.</p>
<p><a href="http://jonsegador.com/wp-content/renfe-android.png"><img src="http://jonsegador.com/wp-content/renfe-android.png" alt="" title="renfe-android" width="400" height="40" class="aligncenter size-medium wp-image-621" /></a></p>
<p>El mensaje del abogado se envió el 29 de diciembre de 2011 y el día 3 ya estaba suspendida. Bastante rápidos para lo que les interesa.</p>
<p>La decisión que he tomado es <strong>liberar el código y subir el apk de la aplicación a mi blog para su libre descarga</strong>. No tengo intención de seguir beneficiando a Renfe con la aplicación y además de manera gratuita (<strong>no he ganado un solo céntimo con la aplicación, era totalmente gratuita y sin publicidad</strong>). No dejaré de preocuparme por ella y la iré actualizando (se que existe alguna forma para que las actualizaciones se descarguen desde mi blog, como dice <a href="http://twitter.com/#!/biriru/status/154337908399149057">@biriru</a>)</p>
<p>Gracias a todos por los mensajes y las palabras de ánimo que me habéis dejado en Twitter, la verdad que me han desbordado y no puedo contestar a todos. <strong>¡GRACIAS!</strong></p>
<p>Aquí algunos twits que me han parecido interesantes:</p>
<p><strong>Santi Núñez</strong> <a href="http://twitter.com/#!/snunsan">@snunsan</a><br />
Incapaz de crear app mínimamte seria, @Renfe denuncia la app #Android de @jonseg por &#8220;compentencia desleal&#8221; y Google la suspende #hazteFan</p>
<p><strong>aurelio hernández</strong> <a href="http://twitter.com/#!/ahdezsanchez">@ahdezsanchez</a><br />
Renfe se supera. No solo tienen la web más vergonzosa que se recuerda, sino que hace que retiren apps independientes, como la de @jonseg</p>
<p><strong>Dani Rubio</strong> <a href="http://twitter.com/#!/vegaquark">@vegaquark</a><br />
@jonseg Suele pasar que las empresas que desconocen el terreno meten la pata&#8230; Es como los famosos en twitter&#8230;</p>
<p><strong>Rubén Hidalgo</strong> <a href="http://twitter.com/#!/rhidalgo">@rhidalgo</a><br />
@jonseg 100veces mas practica tu app,al final estas facilitando el uso a las personas que lo utilizamos,cansado de #renfe #renfelibreAndroid</p>
<p><strong>papakorkel</strong> <a href="http://twitter.com/#!/papakorkel">@papakorkel</a><br />
@jonseg ¿Desleal porque no es puta mierda como su página web?</p>
<p><strong>Josean Bilbao</strong> <a href="http://twitter.com/#!/joseanbilbao">@joseanbilbao</a><br />
@jonseg otra muestra más de su incompetencia, en lugar de acercarse al talento y colaborar, lo eliminan. #fail #renfe</p>
<p><strong>Albert Mata</strong> <a href="http://twitter.com/#!/almata">@almata</a><br />
@jonseg yo creía que en Android había libertad y no eran como los malísimos de Apple y no pasaban esas cosas&#8230;</p>
<p><strong>rnesto G. Aroca</strong> <a href="http://twitter.com/#!/ErneX">@ErneX</a><br />
@snunsan @Renfe @jonseg Renfe como siempre, cubriéndose de gloria. Son unos incapaces.</p>
<p><strong>Salvador López</strong> <a href="http://twitter.com/#!/salvad0rlopez">@salvad0rlopez</a><br />
@jonseg yo uso tu app , una lastima que te la quiten del market ya que es fantastica, espero que sigas desarrollandola. <img src='http://jonsegador.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Javier Eguiluz</strong> <a href="http://twitter.com/#!/javiereguiluz">@javiereguiluz</a><br />
@jonseg Ánimo Jon! El único consuelo es que Renfe reconoce que no puede ganarte, así que trata de eliminarte <img src='http://jonsegador.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  #android #renfe</p>
<p><strong>Victor</strong> <a href="http://twitter.com/#!/vdesigner_es">@vdesigner_es</a><br />
Bravo por los señores de @renfe obligando a Google a eliminar la única app 100% funcional sobre sus propios servicios #BravoRenfe</p>
<p><strong>A todos los RT, menciones y palabras de ánimo, solo puedo decir: ¡GRACIAS!</strong></p>
<p>&#8212;&#8212;-</p>
<p><strong>Actualización 10 enero 2012</strong>: Ya está disponible el código fuente en github y puedes descargar el fichero .apk de la aplicación si echas un vistazo a la columna derecha del blog.</p>
<p><del datetime="2012-01-10T08:52:22+00:00"><strong>Actualización 4 enero 2012</strong>: Ahora mismo no tengo acceso a la última versión del código de la aplicación. En cuanto pueda (a partir del día 8 de enero) subiré el código a Github y publicaré el .apk en el blog.</del></p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Desarrollo Android: Obtener número de teléfono desde la aplicación</title>
		<link>http://jonsegador.com/2011/11/android-obtener-numero-telefono-desde-aplicacion/</link>
		<comments>http://jonsegador.com/2011/11/android-obtener-numero-telefono-desde-aplicacion/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 17:40:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[getLine1Number]]></category>
		<category><![CDATA[manifest]]></category>
		<category><![CDATA[read_phone_state]]></category>
		<category><![CDATA[teléfono]]></category>
		<category><![CDATA[TelephonyManager]]></category>
		<category><![CDATA[telephony_service]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=584</guid>
		<description><![CDATA[Con este simple código, podremos obtener el número de teléfono donde se está ejecutando la aplicación android. Antes de nada, debemos añadir permisos al archivo manifest.xml: &#60;uses-permission android:name=&#34;android.permission.READ_PHONE_STATE&#34; /&#62; Y, a continuación, la función que nos devolverá el número de teléfono del teléfono donde se está ejecutando nuestra aplicación: private String getPhoneNumber&#40;&#41;&#123; TelephonyManager mTelephonyManager; mTelephonyManager [...]]]></description>
			<content:encoded><![CDATA[<p>Con este simple código, podremos <strong>obtener el número de teléfono</strong> donde se está ejecutando la <strong>aplicación android</strong>.</p>
<p>Antes de nada, debemos añadir <strong>permisos al archivo manifest.xml</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>uses<span style="color: #339933;">-</span>permission android<span style="color: #339933;">:</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;android.permission.READ_PHONE_STATE&quot;</span> <span style="color: #339933;">/&gt;</span></pre></div></div>

<p>Y, a continuación, la función que nos <strong>devolverá el número de teléfono</strong> del teléfono donde se está ejecutando nuestra aplicación:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> getPhoneNumber<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  TelephonyManager mTelephonyManager<span style="color: #339933;">;</span>
  mTelephonyManager <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>TelephonyManager<span style="color: #009900;">&#41;</span> getSystemService<span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span>.<span style="color: #006633;">TELEPHONY_SERVICE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #000000; font-weight: bold;">return</span> mTelephonyManager.<span style="color: #006633;">getLine1Number</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/11/android-obtener-numero-telefono-desde-aplicacion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Desarrollo android: Rellenar un spinner con los datos de un array</title>
		<link>http://jonsegador.com/2011/02/desarrollo-android-rellenar-un-spinner-con-los-datos-de-un-array/</link>
		<comments>http://jonsegador.com/2011/02/desarrollo-android-rellenar-un-spinner-con-los-datos-de-un-array/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 17:07:24 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[arrayadapter]]></category>
		<category><![CDATA[spinner]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=366</guid>
		<description><![CDATA[En este ejemplo, vamos a rellenar un spinner (un combo, select o como queráis llamarlo) con los datos que tenemos en un array. Añadimos el spinner en la plantilla: &#60;Spinner android:id=&#34;@+id/spinner_animales&#34; android:layout_width=&#34;wrap_content&#34; android:layout_height=&#34;wrap_content&#34; /&#62; Creamos un archivo llamado arrays.xml en la carpeta /res/values/ de nuestro proyecto e insertamos el siguiente contenido: &#60;resources&#62; &#60;string-array name=&#34;animales&#34;&#62; &#60;item&#62;Elefante&#60;/item&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>En este ejemplo, vamos a rellenar un <strong>spinner</strong> (un combo, select o como queráis llamarlo) con los datos que tenemos en un array.</p>
<p>Añadimos el spinner en la plantilla:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Spinner</span> <span style="color: #000066;">android:id</span>=<span style="color: #ff0000;">&quot;@+id/spinner_animales&quot;</span></span>
<span style="color: #009900;">    <span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;wrap_content&quot;</span></span>
<span style="color: #009900;">    <span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;wrap_content&quot;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>Creamos un archivo llamado <strong>arrays.xml</strong> en la carpeta <strong>/res/values/</strong> de nuestro proyecto e insertamos el siguiente contenido:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string-array</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;animales&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Elefante<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Tortuga<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Conejo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Ratón<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string-array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Por último, en la <strong>activity</strong> asignamos el array anterior al spinner mediante un <strong>ArrayAdapter</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Spinner spinner_animales <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Spinner<span style="color: #009900;">&#41;</span> findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">spinner_animales</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ArrayAdapter spinner_adapter <span style="color: #339933;">=</span> ArrayAdapter.<span style="color: #006633;">createFromResource</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">this</span>, R.<span style="color: #006633;">array</span>.<span style="color: #006633;">animales</span> , android.<span style="color: #006633;">R</span>.<span style="color: #006633;">layout</span>.<span style="color: #006633;">simple_spinner_item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
spinner_adapter.<span style="color: #006633;">setDropDownViewResource</span><span style="color: #009900;">&#40;</span>android.<span style="color: #006633;">R</span>.<span style="color: #006633;">layout</span>.<span style="color: #006633;">simple_spinner_dropdown_item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
spinner_animales.<span style="color: #006633;">setAdapter</span><span style="color: #009900;">&#40;</span>spinner_adapter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Y eso es todo. Si ejecutamos el proyecto se mostrará el spinner con los elementos del array.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/02/desarrollo-android-rellenar-un-spinner-con-los-datos-de-un-array/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aplicación para Android: Estaciones de esquí</title>
		<link>http://jonsegador.com/2010/11/aplicacion-para-android-estaciones-de-esqui/</link>
		<comments>http://jonsegador.com/2010/11/aplicacion-para-android-estaciones-de-esqui/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 08:55:16 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Proyectos propios]]></category>
		<category><![CDATA[aplicación]]></category>
		<category><![CDATA[esqui]]></category>
		<category><![CDATA[esquiar]]></category>
		<category><![CDATA[estaciones]]></category>
		<category><![CDATA[pistas]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=332</guid>
		<description><![CDATA[Actualización: - Planos de las estaciones (mantén el dedo pulsado para hacer zoom) - Instalar en la tarjeta SD. - Arreglados problemas con algunas webcams. Añadidas las estaciones -Fuentes de Invierno -Navacerrada Añadido Pirineo Francés - La Pierre Saint-Martin - Luz Ardiden - Grand Tourmalet - etc Si falta alguna estación, ponte en contacto conmigo [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Actualización:</strong><br />
- Planos de las estaciones (mantén el dedo pulsado para hacer zoom)<br />
- Instalar en la tarjeta SD.<br />
- Arreglados problemas con algunas webcams.</p>
<p>Añadidas las estaciones<br />
-Fuentes de Invierno<br />
-Navacerrada</p>
<p>Añadido Pirineo Francés<br />
- La Pierre Saint-Martin<br />
- Luz Ardiden<br />
- Grand Tourmalet<br />
- etc</p>
<p>Si falta alguna estación, ponte en contacto conmigo y la incluiré cuanto antes</p>
<p>&#8212;&#8212;</p>
<p>Con esta aplicación podrás consultar en todo momento la cantidad de nieve y el estado de las pistas de esquí observándolas directamente a través de las webcams.</p>
<p>Disponibles las estaciones de esqui de toda España, contando todas ellas con varias webcams.</p>
<p>Obtendrás información del estado de las pistas, espesor y calidad de la nieve, remontes abiertos, pistas abiertas, kilómetros abiertos, etc.</p>
<p>Toda la información sobre estaciones de esquí y pistas de ski.</p>
<p>- Alto Campoo<br />
- Astún<br />
- Candanchú<br />
- Formigal<br />
- Baqueira Beret<br />
- Valdelinares<br />
- Valdezcaray<br />
- Sierra Nevada<br />
- etc.</p>
<p>Para descargarla, solamente deberemos buscar &#8220;estaciones esqui&#8221; en el Android Market o a partir del siguiente código QR:<br />
<img src="http://jonsegador.com/wp-content/estaciones_esqui_qr.png" alt="estaciones-esqui-android-qrcode" title="estaciones-esqui-android-qrcode" class="alignnone size-full wp-image-186" /></p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2010/11/aplicacion-para-android-estaciones-de-esqui/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aplicación para Android: Oficinas de la BBK</title>
		<link>http://jonsegador.com/2010/10/aplicacion-para-android-oficinas-de-la-bbk/</link>
		<comments>http://jonsegador.com/2010/10/aplicacion-para-android-oficinas-de-la-bbk/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 07:08:19 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Proyectos propios]]></category>
		<category><![CDATA[aplicación]]></category>
		<category><![CDATA[bbk]]></category>
		<category><![CDATA[cajeros]]></category>
		<category><![CDATA[market]]></category>
		<category><![CDATA[oficinas]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=314</guid>
		<description><![CDATA[Con esta aplicación ya puedes buscar las oficinas de la BBK más cercanas a tu posición. Es una primera versión básica. Las próximas actualizaciones serán: - Buscar por número de oficina - Información de la oficina: teléfono, horarios, etc. - Vuestras sugerencias en los comentarios! Para descargarla, solamente deberemos buscar &#8220;bbk&#8221; en el Android Market [...]]]></description>
			<content:encoded><![CDATA[<p>Con esta aplicación ya puedes buscar las oficinas de la BBK más cercanas a tu posición.</p>
<p>Es una primera versión básica. Las próximas actualizaciones serán:<br />
- Buscar por número de oficina<br />
- Información de la oficina: teléfono, horarios, etc.<br />
- Vuestras sugerencias en los comentarios!</p>
<p>Para descargarla, solamente deberemos buscar &#8220;bbk&#8221; en el Android Market o a partir del siguiente código QR:<br />
<img src="http://jonsegador.com/wp-content/bbk_qr.png" alt="bbk-qrcode" title="bbk-qrcode" width="210" height="210" class="alignnone size-full wp-image-186" /></p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2010/10/aplicacion-para-android-oficinas-de-la-bbk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emulador Android: Acceder a la web en desarrollo en la propia máquina (localhost)</title>
		<link>http://jonsegador.com/2010/10/emulador-android-acceder-web-en-desarrollo-en-la-propia-maquina-localhost/</link>
		<comments>http://jonsegador.com/2010/10/emulador-android-acceder-web-en-desarrollo-en-la-propia-maquina-localhost/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 22:19:08 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[adb]]></category>
		<category><![CDATA[emulador]]></category>
		<category><![CDATA[hosts]]></category>
		<category><![CDATA[localhost]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=286</guid>
		<description><![CDATA[En mi caso, cuando estoy desarrollando una aplicación web (o móvil) desarrollo en local sincronizando con un servidor svn. Para poder ir comprobando la web, creo un nuevo sitio en Apache y fuerzo la ip en el /etc/hosts a la propia máquina (localhost). Este podría ser un ejemplo de configuración de una web para Apache. [...]]]></description>
			<content:encoded><![CDATA[<p>En mi caso, cuando estoy desarrollando una aplicación web (o móvil) desarrollo en local sincronizando con un servidor svn. Para poder ir comprobando la web, creo un nuevo sitio en Apache y fuerzo la ip en el /etc/hosts a la propia máquina (localhost).</p>
<p>Este podría ser un ejemplo de configuración de una web para Apache. <strong>Todos los ejemplos de este post son para Ubuntu</strong>. Evidentemente tenemos que tener instalado un servidor Apache en nuestra máquina.</p>
<p>El archivo lo pondríamos en /etc/apache2/sites-available/ejemploweb</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>VirtualHost <span style="color: #000000; font-weight: bold;">*</span>:<span style="color: #000000;">80</span><span style="color: #000000; font-weight: bold;">&gt;</span>
   ServerAdmin info<span style="color: #000000; font-weight: bold;">@</span>ejemploweb.com
   DocumentRoot <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>vhosts<span style="color: #000000; font-weight: bold;">/</span>ejemploweb
   ServerName ejemploweb.com
   ServerAlias <span style="color: #000000; font-weight: bold;">*</span>.ejemploweb.com
   ErrorLog <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>ejemploweb_error.log
   CustomLog <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>ejemplo_access.log common
   DirectoryIndex index.php
   <span style="color: #000000; font-weight: bold;">&lt;</span>Directory <span style="color: #ff0000;">&quot;/var/www/vhosts/ejemploweb&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span>
        Options Indexes FollowSymLinks
        Order Allow,Deny
        Allow from all
        AllowOverride all
   <span style="color: #000000; font-weight: bold;">&lt;/</span>Directory<span style="color: #000000; font-weight: bold;">&gt;</span>
   <span style="color: #000000; font-weight: bold;">&lt;/</span>Directory<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;/</span>VirtualHost<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Suponiendo que el contenido de nuestra web se encuentra en el directorio /var/www/vhosts/ejemploweb.</p>
<p>Tenemos que hacer un enlace simbólico a /etc/apache2/sites-enabled</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>ejemploweb <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>sites-enabled<span style="color: #000000; font-weight: bold;">/</span>ejemploweb</pre></div></div>

<p>Y reiniciamos apache:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 restart</pre></div></div>

<p>Ya lo tendríamos configurado. Ahora tenemos que forzar que el dominio que hayamos seleccionado lo busque en localhost o en la ip 127.0.0.1. Esto lo podemos hacer en nuestro archivo /etc/hosts</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">nano</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>hosts</pre></div></div>

<p>Y añadimos la siguiente línea al final del archivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">127.0.0.1 www.ejemploweb.com ejemploweb.com</pre></div></div>

<p>Ahora, si en nuestro navegador vamos a la dirección http://ejemploweb.com, nos cargará la página que tenemos en local y hemos configurado anteriormente.</p>
<p><strong>El objetivo de este post es poder acceder a esta web en desarrollo desde el emulador de Android.</strong> El emulador de Android no tiene en cuenta el archivo /etc/hosts, por lo que al intentar acceder a la web ejemploweb.com desde el emulador, nos mostrará un error indicando que no se ha encontrado la página o veremos la web que tenemos en producción (si está online) y no en desarrollo. El emulador Android no hace caso al archivo /etc/hosts, lo único que hace es extraer las DNS que tenemos configuradas en nuestra máquina y copiarlas al propio emulador.</p>
<p>Si queremos que el emulador nos resuelva la web que tenemos en nuestro ordenador, deberemos configurar el archivo /system/etc/hosts propio del emulador Android.</p>
<p>Para ello, vamos a la carpeta <del datetime="2011-02-18T15:24:13+00:00">tools</del> platform_tools donde tenemos descargado el sdk de Android:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>user<span style="color: #000000; font-weight: bold;">/</span>android-sdk-linux_86<span style="color: #000000; font-weight: bold;">/</span>platform_tools</pre></div></div>

<p>Lo primero que hacemos es saber el &#8220;serial number&#8221; del emulador que tenemos abierto (por que tenemos que tener un emulador de Android iniciado, por ejemplo, desde eclipse)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>adb devices</pre></div></div>

<p>Y obtendremos un salida parecida a esta:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">List of devices attached 
emulator-<span style="color: #000000;">5554</span>	device</pre></div></div>

<p>El &#8220;serial number&#8221; del emulador es &#8220;emulator-5554&#8243;. En todos los comandos que escribamos a continuación, tenemos que indicar a que emulador queremos realizar los cambios:</p>
<p>Llamamos al comando adb con la opción remount para que no nos dé fallos de escritura:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>adb <span style="color: #660033;">-s</span> emulator-<span style="color: #000000;">5554</span> remount</pre></div></div>

<p>A continuación importamos el archivo /system/etc/hosts original que tenemos en el emulador Android (en el ejemplo, lo importamos a nuestra carpeta personal):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>adb <span style="color: #660033;">-s</span> emulator-<span style="color: #000000;">5554</span> pull <span style="color: #000000; font-weight: bold;">/</span>system<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>hosts <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>user</pre></div></div>

<p>Ahora hacemos los cambios en el archivo que hemos importado, incluyendo al final del mismo la siguiente linea:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">10.0.2.2  www.ejemploweb.com ejemploweb.com</pre></div></div>

<p>Podemos comprobar que la ip es 10.0.2.2, que es una ip especial del emulador la cual hace referencia a nuestra máquina local. La ip 127.0.0.1, hace referencia al propio emulador Android.</p>
<p>Guardamos el archivo y lo volvemos a copiar al emulador:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>adb <span style="color: #660033;">-s</span> emulator-<span style="color: #000000;">5554</span> push <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>user<span style="color: #000000; font-weight: bold;">/</span>hosts <span style="color: #000000; font-weight: bold;">/</span>system<span style="color: #000000; font-weight: bold;">/</span>etc</pre></div></div>

<p>Y ya lo tenemos hecho! Si vamos al navegador dentro del emulador Android y escribimos la dirección http://ejemploweb.com, deberemos ir a la web que tenemos en desarrollo en nuestra máquina local.</p>
<p><strong>Actualización:</strong></p>
<p>Si os suelta un error, al intentar copiar de nuevo el archivo hosts al emulador, del tipo:<br />
failed to copy &#8220;hosts&#8221; to &#8220;/system/etc&#8221;: No space left on device<br />
failed to copy &#8220;hosts&#8221; to &#8220;/system/etc&#8221;: Out of memory</p>
<p>Hay que iniciar el emulador con el parámetro <strong>-partition-size 128</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>emulator <span style="color: #660033;">-avd</span> nombre_de_nuestro_avd <span style="color: #660033;">-partition-size</span> <span style="color: #000000;">128</span> <span style="color: #000000; font-weight: bold;">&amp;</span></pre></div></div>

<p>Terminamos la orden poniendo &#8220;&#038;&#8221; para que se ejecute en segundo plano (entornos linux).<br />
El comando &#8216;emulator&#8217; está dentro de la carpeta tools donde tenemos instalado el SDK.</p>
<p>También podemos especificar este comando en el propio eclipse. Lo hacemos en &#8220;Run/Run configurations&#8221;, pestaña &#8220;target&#8221; y escribimos</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">-partition-size</span> <span style="color: #000000;">128</span></pre></div></div>

<p>en el campo &#8220;Additional Emulator Command Line Options&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2010/10/emulador-android-acceder-web-en-desarrollo-en-la-propia-maquina-localhost/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mostrar/cargar imagen externa en una aplicación Android</title>
		<link>http://jonsegador.com/2010/03/mostrarcargar-imagen-externa-en-una-aplicacion-android/</link>
		<comments>http://jonsegador.com/2010/03/mostrarcargar-imagen-externa-en-una-aplicacion-android/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 13:52:30 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[cargar]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[mostrar]]></category>
		<category><![CDATA[servidor]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=176</guid>
		<description><![CDATA[Muchas veces nos encontramos con el problema de tener que cargar imagenes, que tenemos alojadas en un servidor externo, en nuestra aplicación Android. Las imágenes básicas las podemos incluir en la propia aplicación pero imágenes como, por ejemplo, los avatares de los usuarios los tenemos que cargar directamente desde el servidor. Primero creamos el layout [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces nos encontramos con el problema de tener que cargar imagenes, que tenemos alojadas en un servidor externo, en nuestra aplicación Android. Las imágenes básicas las podemos incluir en la propia aplicación pero imágenes como, por ejemplo, los avatares de los usuarios los tenemos que cargar directamente desde el servidor.</p>
<p>Primero creamos el layout (main.xml):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;?</span>xml version<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;1.0&quot;</span> encoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;utf-8&quot;</span> <span style="color: #339933;">?&gt;</span>
<span style="color: #339933;">&lt;</span>LinearLayout xmlns<span style="color: #339933;">:</span>android<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://schemas.android.com/apk/res/android&quot;</span>
    android<span style="color: #339933;">:</span>orientation<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;vertical&quot;</span>
    android<span style="color: #339933;">:</span>layout_width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fill_parent&quot;</span>
    android<span style="color: #339933;">:</span>layout_height<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fill_parent&quot;</span><span style="color: #339933;">&gt;</span> 
&nbsp;
 <span style="color: #339933;">&lt;</span>ImageView android<span style="color: #339933;">:</span>id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@+id/image_view&quot;</span>
    android<span style="color: #339933;">:</span>layout_width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;wrap_content&quot;</span>
    android<span style="color: #339933;">:</span>layout_height<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;wrap_content&quot;</span> <span style="color: #339933;">/&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>LinearLayout<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Ahora creamos la activity que cargará la imagen del servidor y la mostrará en el layout anterior (Main.java):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.jonsegador.examples.externalimage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.net.HttpURLConnection</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.net.URL</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.app.Activity</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.graphics.Bitmap</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.graphics.BitmapFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.os.Bundle</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.widget.ImageView</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.widget.Toast</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Main <span style="color: #000000; font-weight: bold;">extends</span> Activity <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> ImageView imageView<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Bitmap loadedImage<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> imageHttpAddress <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://jonsegador.com/wp-content/apezz.png&quot;</span><span style="color: #339933;">;</span>            
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreate</span><span style="color: #009900;">&#40;</span>savedInstanceState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        setContentView<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        imageView <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>ImageView<span style="color: #009900;">&#41;</span> findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">image_view</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>       
        downloadFile<span style="color: #009900;">&#40;</span>imageHttpAddress<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">void</span> downloadFile<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> imageHttpAddress<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">URL</span> imageUrl <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            imageUrl <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">URL</span><span style="color: #009900;">&#40;</span>imageHttpAddress<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">HttpURLConnection</span> conn <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">HttpURLConnection</span><span style="color: #009900;">&#41;</span> imageUrl.<span style="color: #006633;">openConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            conn.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            loadedImage <span style="color: #339933;">=</span> BitmapFactory.<span style="color: #006633;">decodeStream</span><span style="color: #009900;">&#40;</span>conn.<span style="color: #006633;">getInputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            imageView.<span style="color: #006633;">setImageBitmap</span><span style="color: #009900;">&#40;</span>loadedImage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Toast.<span style="color: #006633;">makeText</span><span style="color: #009900;">&#40;</span>getApplicationContext<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;Error cargando la imagen: &quot;</span><span style="color: #339933;">+</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, Toast.<span style="color: #006633;">LENGTH_LONG</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Por último, incluimos la Activity en el AndroidManifest.xml y damos permisos para acceder a internet.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;?</span>xml version<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;1.0&quot;</span> encoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;utf-8&quot;</span><span style="color: #339933;">?&gt;</span>
<span style="color: #339933;">&lt;</span>manifest xmlns<span style="color: #339933;">:</span>android<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://schemas.android.com/apk/res/android&quot;</span>
      <span style="color: #000000; font-weight: bold;">package</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;com.jonsegador.examples.externalimage&quot;</span>
      android<span style="color: #339933;">:</span>versionCode<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;1&quot;</span>
      android<span style="color: #339933;">:</span>versionName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;1.0&quot;</span><span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>application android<span style="color: #339933;">:</span>icon<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@drawable/icon&quot;</span> android<span style="color: #339933;">:</span>label<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@string/app_name&quot;</span><span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>activity android<span style="color: #339933;">:</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;.Main&quot;</span> android<span style="color: #339933;">:</span>label<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@string/app_name&quot;</span><span style="color: #339933;">&gt;</span>
            <span style="color: #339933;">&lt;</span>intent<span style="color: #339933;">-</span>filter<span style="color: #339933;">&gt;</span>
                <span style="color: #339933;">&lt;</span>action android<span style="color: #339933;">:</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;android.intent.action.MAIN&quot;</span> <span style="color: #339933;">/&gt;</span>
                <span style="color: #339933;">&lt;</span>category android<span style="color: #339933;">:</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;android.intent.category.LAUNCHER&quot;</span> <span style="color: #339933;">/&gt;</span>
            <span style="color: #339933;">&lt;/</span>intent<span style="color: #339933;">-</span>filter<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;/</span>activity<span style="color: #339933;">&gt;</span>    
    <span style="color: #339933;">&lt;/</span>application<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>uses<span style="color: #339933;">-</span>sdk android<span style="color: #339933;">:</span>minSdkVersion<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;3&quot;</span> <span style="color: #339933;">/&gt;</span>  
    <span style="color: #339933;">&lt;</span>uses<span style="color: #339933;">-</span>permission android<span style="color: #339933;">:</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;android.permission.INTERNET&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;/</span>manifest<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Y este debería de ser el resultado:<br />
<img src="http://jonsegador.com/wp-content/imagen_externa_android-199x300.png" alt="imagen_externa_android" title="imagen_externa_android" width="199" height="300" class="alignnone size-medium wp-image-180" /></p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2010/03/mostrarcargar-imagen-externa-en-una-aplicacion-android/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Tutorial Android paso a paso III: Desarrollo de la aplicación Notepad</title>
		<link>http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-iii-desarrollo-de-la-aplicacion-notepad/</link>
		<comments>http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-iii-desarrollo-de-la-aplicacion-notepad/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 09:48:32 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[aplicación]]></category>
		<category><![CDATA[notepad]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=136</guid>
		<description><![CDATA[En este tercer y último post del tutorial, vamos a practicar el ciclo de vida de la aplicación, y como guardar y recuperar el estado de la aplicación. Puedes ver los anteriores artículos: Tutorial Android paso a paso I: Desarrollo de la aplicación Notepad Tutorial Android paso a paso II: Desarrollo de la aplicación Notepad [...]]]></description>
			<content:encoded><![CDATA[<p>En este tercer y último post del tutorial, vamos a practicar el ciclo de vida de la aplicación, y como guardar y recuperar el estado de la aplicación.</p>
<p>Puedes ver los anteriores artículos:<br />
<a href="http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-desarrollo-aplicacion-notepad/">Tutorial Android paso a paso I: Desarrollo de la aplicación Notepad</a><br />
<a href="http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-ii-desarrollo-de-la-aplicacion-notepad/">Tutorial Android paso a paso II: Desarrollo de la aplicación Notepad</a></p>
<p>Objetivos:<br />
• Conocer los eventos del ciclo de vida de la aplicación.<br />
• Tecnicas para mantener el estado de la aplicación.</p>
<h4><strong>Paso 1</strong></h4>
<p>La aplicación actual contiene algunos problemas. Para solucionarlo, vamos a mover la funcionalidad de edición de notas a la clase NoteEdit.</p>
<p>1. Eliminar el siguiente código de la clase NoteEdit, que obtiene los datos de la nota a través del Bundle. Vamos a pasar a utilizar la clase DBHelper para obtener los datos directamente de la base de datos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">Bundle extras <span style="color: #339933;">=</span> getIntent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getExtras</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
…
<span style="color: #003399;">String</span> title <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">String</span> body <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
mRowId <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>2. Además, eliminamos la asignación de los datos a la interfaz de usuario</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>title <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    mTitleText.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>title<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>body <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    mBodyText.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>body<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 2</strong></h4>
<p>Conectamos la clase NoteEdit con la base de datos.</p>
<p>1. Creamos un nuevo atributo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> NotesDbAdapter mDbHelper<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>2. Conectamos con la base de datos en el constructor, justo después de llamar al constructor padre:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">mDbHelper <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> NotesDbAdapter<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
mDbHelper.<span style="color: #006633;">open</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h4><strong>Paso 3</strong></h4>
<p>Pasamos a comprobar el estado de la variable savedInstanceState. Esto sirve para comprobar si tenemos datos guardados en el Bundle, que debemos recuperar (Esto ocurre si la actividad pierde el foco y después se recupera).</p>
<p>1. Reeplazar el siguiente código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">mRowId <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
Bundle extras <span style="color: #339933;">=</span> getIntent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getExtras</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>extras <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    mRowId <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Por este otro</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">mRowId <span style="color: #339933;">=</span> savedInstanceState <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">?</span> savedInstanceState.<span style="color: #006633;">getLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mRowId <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Bundle extras <span style="color: #339933;">=</span> getIntent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getExtras</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    mRowId <span style="color: #339933;">=</span> extras <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">?</span> extras.<span style="color: #006633;">getLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 4</strong></h4>
<p>Necesitamos completar los campos con los datos de la nota. Llamamos al método populateFields() que completaremos más adelante. Insertarlo justo antes de confirmButton.setOnClickListener():</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">populateFields<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h4><strong>Paso 5</strong></h4>
<p>En esta actividad ya no es necesario devolver ningún tipo de datos, ya que vamos a guardar los datos directamente en esta actividad, por lo que es posible simplificar el método onClick() considerablemente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span><span style="color: #003399;">View</span> view<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    setResult<span style="color: #009900;">&#40;</span>RESULT_OK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    finish<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Más adelante veremos como guardar los datos.</p>
<h4><strong>Paso 6</strong></h4>
<p>Definimos el método populateFields():</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> populateFields<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mRowId <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Cursor</span> note <span style="color: #339933;">=</span> mDbHelper.<span style="color: #006633;">fetchNote</span><span style="color: #009900;">&#40;</span>mRowId<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        startManagingCursor<span style="color: #009900;">&#40;</span>note<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        mTitleText.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>note.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>note.<span style="color: #006633;">getColumnIndexOrThrow</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        mBodyText.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>note.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>note.<span style="color: #006633;">getColumnIndexOrThrow</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 7</strong></h4>
<p>Implementamos los métodos que gestionan el ciclo de vida de Android. Estos métodos nos permiten guardar y recuperar el estado de la actividad en caso de que esta se cierre o pase a un segundo plano (al recibir una llamada, por ejemplo):</p>
<p>1. onSaveInstanceState(): es llamada por Android cuando la actividad va a ser cerrada. Esto significa que aquí se debe guardar toda la información necesaria para restaurar la actividad en su estado  anterior. Podemos pensar que es el método contrario a onCreate(), de hecho el Bundle que construimos en este método, es el que será pasado al método onCreate().</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onSaveInstanceState<span style="color: #009900;">&#40;</span>Bundle outState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onSaveInstanceState</span><span style="color: #009900;">&#40;</span>outState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    outState.<span style="color: #006633;">putLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span>, mRowId<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>2. onPause(): es llamada cuando la actividad va a terminar (con finish()) o pasar a un segundo plano (con una llamada de teléfono).</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onPause<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onPause</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    saveState<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>3. onResume(): es llamada al reactivar la actividad. Completamos los campos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onResume<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onResume</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    populateFields<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 8</strong></h4>
<p>Para terminar de completar la clase NoteEdit, ya solo nos queda guardar los datos en la base de datos. Creamos el método saveState():</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> saveState<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">String</span> title <span style="color: #339933;">=</span> mTitleText.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">String</span> body <span style="color: #339933;">=</span> mBodyText.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mRowId <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">long</span> id <span style="color: #339933;">=</span> mDbHelper.<span style="color: #006633;">createNote</span><span style="color: #009900;">&#40;</span>title, body<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>id <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            mRowId <span style="color: #339933;">=</span> id<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
        mDbHelper.<span style="color: #006633;">updateNote</span><span style="color: #009900;">&#40;</span>mRowId, title, body<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 9</strong></h4>
<p>Volvemos a la clase Notepadv3. En el método onActivityResult(), teníamos implementado todo lo necesario para recibir los datos de la actividad y guardarla en la base de datos. Como este proceso ya lo realizamos en la clase NoteEdit, solo es necesario que actualizemos la lista con los nuevos datos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onActivityResult<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> requestCode, <span style="color: #000066; font-weight: bold;">int</span> resultCode, Intent intent<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onActivityResult</span><span style="color: #009900;">&#40;</span>requestCode, resultCode, intent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    fillData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 10</strong></h4>
<p>Finalmente, es esta misma clase, al seleccionar un elemento de la lista, ya no es ncesario pasar todos los datos de la nota, únicamente el id, por lo que el método onListItemClick(), quedaría de la siguiete manera:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onListItemClick<span style="color: #009900;">&#40;</span><span style="color: #003399;">ListView</span> l, <span style="color: #003399;">View</span> v, <span style="color: #000066; font-weight: bold;">int</span> position, <span style="color: #000066; font-weight: bold;">long</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onListItemClick</span><span style="color: #009900;">&#40;</span>l, v, position, id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Intent i <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, NoteEdit.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span>, id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    startActivityForResult<span style="color: #009900;">&#40;</span>i, ACTIVITY_EDIT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y con este último post hemos terminado el tutorial. Espero que os haya servido de ayuda y, como siempre, cualquier duda o pregunta en los comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-iii-desarrollo-de-la-aplicacion-notepad/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tutorial Android paso a paso II: Desarrollo de la aplicación Notepad</title>
		<link>http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-ii-desarrollo-de-la-aplicacion-notepad/</link>
		<comments>http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-ii-desarrollo-de-la-aplicacion-notepad/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 14:31:18 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[aplicación]]></category>
		<category><![CDATA[notepad]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=119</guid>
		<description><![CDATA[Continuamos con la segunda parte del tutorial para el desarrollo de una aplicación para Android paso a paso. La primera parte la puedes consultar en Tutorial Android paso a paso I: Desarrollo de la aplicación Notepad. En este segundo post, vamos a crear una segunda actividad que nos permita crear y editar notas. Además, vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Continuamos con la segunda parte del tutorial para el desarrollo de una aplicación para Android paso a paso. La primera parte la puedes consultar en <a href="http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-desarrollo-aplicacion-notepad/">Tutorial Android paso a paso I: Desarrollo de la aplicación Notepad</a>.</p>
<p>En este segundo post, vamos a crear una segunda actividad que nos permita crear y editar notas. Además, vamos a poder tener la posibilidad de eliminar notas a través del un menú contextual.</p>
<p>Objetivos:<br />
  • Crear una nueva actividad.<br />
  • Realizar llamadas a la nueva actividad.<br />
  • Paso de datos entre las actividades.<br />
  • Crear un nuevo menu contextual.</p>
<h4><strong>Paso 1</strong></h4>
<p>Vamos a crear un menú contextual que nos permita eliminar las notas creadas por el usuario. Este menú se activará al seleccionar una nota:</p>
<p>1. Relacionamos la lista de notas (ListView) con el menu contextual:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">registerForContextMenu<span style="color: #009900;">&#40;</span>getListView<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>2. Creamos el menú contextual con la opción de eliminar una nota:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreateContextMenu<span style="color: #009900;">&#40;</span>ContextMenu menu, <span style="color: #003399;">View</span> v, ContextMenuInfo menuInfo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreateContextMenu</span><span style="color: #009900;">&#40;</span>menu, v, menuInfo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    menu.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, DELETE_ID, <span style="color: #cc66cc;">0</span>, R.<span style="color: #006633;">string</span>.<span style="color: #006633;">menu_delete</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>3. Ahora que tenemos el menú creado y relacionado con el listado, tenemos que atender a las pulsaciones en el menú contextual:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> onContextItemSelected<span style="color: #009900;">&#40;</span><span style="color: #003399;">MenuItem</span> item<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>item.<span style="color: #006633;">getItemId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">case</span> DELETE_ID<span style="color: #339933;">:</span>
            AdapterContextMenuInfo info <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>AdapterContextMenuInfo<span style="color: #009900;">&#41;</span>
            item.<span style="color: #006633;">getMenuInfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            mDbHelper.<span style="color: #006633;">deleteNote</span><span style="color: #009900;">&#40;</span>info.<span style="color: #006633;">id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            fillData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onContextItemSelected</span><span style="color: #009900;">&#40;</span>item<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 2</strong></h4>
<p>Como hemos visto antes, vamos a dar la posibilidad al usuario de crear y editar notas. Para ello, necesitamos una actividad que controle la interfaz de usuario.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> NoteEdit <span style="color: #000000; font-weight: bold;">extends</span> Activity <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> EditText mTitleText<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> EditText mBodyText<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Long</span> mRowId<span style="color: #339933;">;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreate</span><span style="color: #009900;">&#40;</span>savedInstanceState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        setContentView<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">note_edit</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        mTitleText <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>EditText<span style="color: #009900;">&#41;</span> findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        mBodyText <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>EditText<span style="color: #009900;">&#41;</span> findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">body</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Button</span> confirmButton <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Button</span><span style="color: #009900;">&#41;</span> findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">confirm</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        mRowId <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        Bundle extras <span style="color: #339933;">=</span> getIntent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getExtras</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>extras <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">String</span> title <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">String</span> body <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            mRowId <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>title <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                mTitleText.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>title<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>body <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                mBodyText.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>body<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
    confirmButton.<span style="color: #006633;">setOnClickListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">View</span>.<span style="color: #006633;">OnClickListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span><span style="color: #003399;">View</span> view<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Bundle bundle <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Bundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        bundle.<span style="color: #006633;">putString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span>,
        mTitleText.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        bundle.<span style="color: #006633;">putString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span>,
        mBodyText.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mRowId <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            bundle.<span style="color: #006633;">putLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span>, mRowId<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        Intent mIntent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        mIntent.<span style="color: #006633;">putExtras</span><span style="color: #009900;">&#40;</span>bundle<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        setResult<span style="color: #009900;">&#40;</span>RESULT_OK, mIntent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        finish<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 3</strong></h4>
<p>Ya tenemos la interfaz de usuario, y la actividad para controlarla. Vamos a abrir la nueva actividad desde el listado, para crear una nueva nota. Modificamos el método createNote() de la siguiente manera:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> createNote<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Intent i <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, NoteEdit.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    startActivityForResult<span style="color: #009900;">&#40;</span>i, ACTIVITY_CREATE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 4</strong></h4>
<p>Para editar las notas ya creadas, creamos un evento para atender a las pulsaciones de los elementos de las listas. Pasamos los datos de la nota a la nueva actividad.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onListItemClick<span style="color: #009900;">&#40;</span><span style="color: #003399;">ListView</span> l, <span style="color: #003399;">View</span> v, <span style="color: #000066; font-weight: bold;">int</span> position, <span style="color: #000066; font-weight: bold;">long</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onListItemClick</span><span style="color: #009900;">&#40;</span>l, v, position, id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">Cursor</span> c <span style="color: #339933;">=</span> mNotesCursor<span style="color: #339933;">;</span>
    c.<span style="color: #006633;">moveToPosition</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Intent i <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, NoteEdit.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span>, id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span>, c.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>
    c.<span style="color: #006633;">getColumnIndexOrThrow</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span>, c.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>
    c.<span style="color: #006633;">getColumnIndexOrThrow</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    startActivityForResult<span style="color: #009900;">&#40;</span>i, ACTIVITY_EDIT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 5</strong></h4>
<p>Los métodos creados anteriormente createNote() y onListItemClick() nos devuelven datos, por lo que necesitamos un método para manejar la respuesta. onActivityResult() es el método ejecutado cuando una actividad devuelve resultados.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Override
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onActivityResult<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> requestCode, <span style="color: #000066; font-weight: bold;">int</span> resultCode, Intent intent<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onActivityResult</span><span style="color: #009900;">&#40;</span>requestCode, resultCode, intent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Bundle extras <span style="color: #339933;">=</span> intent.<span style="color: #006633;">getExtras</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>requestCode<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">case</span> ACTIVITY_CREATE<span style="color: #339933;">:</span>
            <span style="color: #003399;">String</span> title <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">String</span> body <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            mDbHelper.<span style="color: #006633;">createNote</span><span style="color: #009900;">&#40;</span>title, body<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            fillData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">case</span> ACTIVITY_EDIT<span style="color: #339933;">:</span>
            <span style="color: #003399;">Long</span> rowId <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getLong</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_ROWID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>rowId <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">String</span> editTitle <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_TITLE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">String</span> editBody <span style="color: #339933;">=</span> extras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>NotesDbAdapter.<span style="color: #006633;">KEY_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            mDbHelper.<span style="color: #006633;">updateNote</span><span style="color: #009900;">&#40;</span>rowId, editTitle, editBody<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    fillData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4><strong>Paso 6</strong></h4>
<p>La nueva actividad que hemos definido anteriormente, hay que añadirla a AndroidManifest.xml. Esto permite al sistema conocer los componentes de la aplicación.<br />
Eclipse include un editor para el manifiesto que facilita la edición del fichero AndroidManifest.xml. Para añadir una nueva actividad:</p>
<p>1. Abrir el fichero AndroidManifest.xml<br />
2. Seleccionar la pestaña Application.<br />
3. Pulsamos Add en la sección de Application Nodes.<br />
4. En el cuadro de diálogo, seleccionar &#8220;Create a new element at the top level, in Application&#8221; y Activity. Pulsar OK.<br />
5. Seleccionar la nueva actividad creada, y en el campo de texto Name, escribir .NoteEdit.</p>
<h4><strong>Paso 7</strong></h4>
<p>Ya hemos terminado esta segunda entrega del tutorial. Si ejecutamos la aplicación, editamos una nota y pulsamos el botón atrás, veremos que se produce un error. Veremos como solucionar estos  problemas en el siguiente post.</p>
<p><strong>Cualquier pregunta o duda (o corrección) en los comentarios.</strong></p>
<p>Ya puedes consultar la tercera parte del tutorial: <a href="http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-iii-desarrollo-de-la-aplicacion-notepad/">Tutorial Android paso a paso III: Desarrollo de la aplicación Notepad</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-ii-desarrollo-de-la-aplicacion-notepad/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

