Programación Android, AsyncTask – Conectar a Internet y leer XML

Share if you like...Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0

android_xml
En esta ocasión vamos a desarrollar una aplicación va a conectar a Internet y va a recoger un documento XML a través de un AsynkTask, para mostrar en un ListView las últimas publicaciones del blog. En primer lugar es necesario conocer la estructura del XML que vamos a utilizar, en este caso podemos ver la estructura completa en el siguiente enlace http://www.proyectosimio.com/feed/

Como vemos, tenemos una primera etiqueta , y en su interior se encuentra el título del blog, el link, la descripción, la última modificación de algún dato, idioma, etc. En nuestro ejemplo vamos a utilizar las etiquetas , que contienen los artículos que se han publicado en el blog. Dentro de esta etiqueta vemos que existen las etiquetas </em> y <em> <link></em>, que contienen el título del artículo y el link en el que se encuentra.</p> <p>En nuestro ListView vamos a mostrar el título de la entrada, y cuando se pulse sobre una lanzaremos un <em>Intent </em>para que se abra el navegador y muestre el artículo deseado.<br /> <span id="more-1028"></span></p> <h2>Crear la interfaz</h2> <p>En primer lugar, como siempre, vamos a crear la interfaz de nuestra aplicación:</p> <figure id="attachment_1048" style="width: 480px;" class="wp-caption aligncenter"><img class="size-full wp-image-1048" alt="Layout" src="http://www.proyectosimio.com/wp-content/uploads/2013/12/proyecto-simio-layout.png" width="480" height="800" /><figcaption class="wp-caption-text">Layout</figcaption></figure> <pre class="brush: xml; title: ; notranslate" title=""> </pre> <p>Los archivos de recursos utilizados para el Layout son:</p> <ul> <ul> <li>colors.xml:</li> </ul> </ul> <pre class="brush: xml; title: ; notranslate" title=""> <!--?xml version="1.0" encoding="utf-8"?--> #AAAAAA #FFFFFF </pre> <ul> <ul> <li>dimens.xml:</li> </ul> </ul> <pre class="brush: xml; title: ; notranslate" title=""> <!-- Default screen margins, per the Android Design guidelines. --> 16dp 16dp 115dp 10dp </pre> <ul> <ul> <li>strings.xml:</li> </ul> </ul> <pre class="brush: xml; title: ; notranslate" title=""> <!--?xml version="1.0" encoding="utf-8"?--> Proyecto Simio Imagen de cabecera </pre> <ul> <ul> <li>shape.xml;</li> </ul> </ul> <pre class="brush: xml; title: ; notranslate" title=""> <!--?xml version="1.0" encoding="utf-8"?--> </pre> <h2>Crear el código de la Activity</h2> <p>Una vez que tenemos la interfaz lista vamos a <strong>instanciar los objetos que necesitamos en la Activity principal</strong>, que serán nuestro <em>ListView </em>y un <em>Adapter </em>personalizado:</p> <pre class="brush: java; title: ; notranslate" title=""> private ListView lvPublicaciones; private AdapterLVMain lvAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvAdapter = new AdapterLVMain(this); lvPublicaciones = (ListView) findViewById(R.id.lvPublicaciones); lvPublicaciones.setAdapter(lvAdapter); lvPublicaciones.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { // TODO Lanzar el intent para abrir el navegador y mostrar el artículo // completo. } </pre> <p>A continuación tendremos que crear el <em>Adapter</em>:</p> <pre class="brush: java; title: ; notranslate" title=""> public class AdapterLVMain extends ArrayAdapter { private Context context; public AdapterLVMain(Context context) { super(context, R.layout.lvpublicaciones_item, new ArrayList()); this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { HolderLVMain holder; if (convertView == null) { holder = new HolderLVMain(); convertView = LayoutInflater.from(context).inflate( R.layout.lvpublicaciones_item, null); holder.tvTitulo = (TextView) convertView .findViewById(R.id.tvTitulo); convertView.setTag(holder); } holder = (HolderLVMain) convertView.getTag(); holder.tvTitulo.setText(getItem(position).getTitulo()); return convertView; } } </pre> <p>Como se ve en el código, al super le hemos mandado un <em>ArrayList </em><strong>que no contiene datos</strong>. Esto es así porque todavía no hemos recogido los datos que necesitamos de Internet, más adelante recuperaremos estos datos y se los añadiremos al <em>Adapter</em>, para que los muestre en el <em>ListView</em>. Por ahora necesitamos crear la clase <em>Publicacion</em>, que aún no tenemos:</p> <pre class="brush: java; title: ; notranslate" title=""> public class Publicacion { private String titulo, link; public Publicacion(String titulo, String link) { super(); this.titulo = titulo; this.link = link; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } } </pre> <h2>Recoger los datos de Internet</h2> <p>Una vez hecho esto al lanzar la aplicación veremos la imagen de cabecera en la parte superior, y un <em>ListView </em>vacío. Lo siguiente que vamos a hacer es recuperar los datos que necesitamos de Internet <strong>a través de una tarea asíncrona</strong>, utilizando un <em>AsyncTask</em>. El motivo es que para realizar conexiones a internet siempre es conveniente hacerlo a través de tareas asíncronas, para evitar posibles fallos en la aplicación debidos a una conexión lenta que obligue a esperar más tiempo de lo esperado. En la <em>Activity</em>, al final del método <em>onCreate()</em> vamos a añadir la siguiente línea:</p> <pre class="brush: java; title: ; notranslate" title=""> ((ProyectoSimioApplication) getApplication()) .updatePublicaciones(lvAdapter); </pre> <p>Este método será el encargado de iniciar la tarea asíncrona para recuperar todos los datos, y posteriormente actualizar el <em>Adapter</em>, por eso le <strong>pasamos como parámetro el <em>Adapter </em>del <em>ListView</em></strong>. Nuestra clase <em>Application </em>sería así:</p> <pre class="brush: java; title: ; notranslate" title=""> public class ProyectoSimioApplication extends Application { private final static String URL = "http://www.proyectosimio.com/feed/"; public void updatePublicaciones(ArrayAdapter lvAdapter) { AsyncConector conector = new AsyncConector(lvAdapter, URL); conector.execute(); } } </pre> <h2>Diseñar el AsyncTask</h2> <p>A la tarea asíncrona le mandamos a su vez el <em>Adapter</em>, ya que es la que va a <strong>recuperar los datos y añadirlos al <em>Adapter</em></strong>, y también le pasamos la URL que contiene la información que necesitamos. La clase <em>AsyncConector </em>es un <em>AsyncTask </em>que en el método doInBackGround() recogerá todas las publicaciones y en <em>onPostExecute()</em> las añadirá al <em>Adapter </em>y posteriormente lo actualizará. El código sería así:</p> <pre class="brush: java; title: ; notranslate" title=""> public class AsyncConector extends AsyncTask<Void, Void, Void> { private ArrayList publicaciones; private ArrayAdapter adapter; private String url; public AsyncConector(ArrayAdapter adapter, String url) { this.adapter = adapter; this.url = url; } @Override protected Void doInBackground(Void... params) { ConectorHttpXML conector = new ConectorHttpXML(url); try { // Recogemos todas las publicaciones de Internet. publicaciones = conector.execute(); } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { // Añadimos todas las publicaciones al Adapter. for (Publicacion tmp : publicaciones) adapter.add(tmp); // Indicamos al Adapter que ha cambiado su contenido, para que adapter.notifyDataSetChanged(); super.onPostExecute(result); } } </pre> <h2>Conectar a Internet y analizar el XML</h2> <p>Como vemos, hemos hecho uso de una nueva clase, que es <strong>la encargada de analizar el documento xml</strong> y generar la colección de datos que necesitamos. Esta clase hará uso a su vez de las clases <em>XmlPullParserFactory</em>, y <em>XmlPullParser</em>. La primera es la que nos permitirá instanciar un objeto de la segunda, que a su vez es la encargada de analizar el documento XML. La forma de utilizarlas es la siguiente:</p> <pre class="brush: java; title: ; notranslate" title=""> public class ConectorHttpXML { private String url; public ConectorHttpXML(String url) { this.url = url; } /** * Analiza el documento XML a partir de la URL indicada en el constructor. * * @return ArrayList con todas las publicaciones que hay en el * XML * @throws XmlPullParserException * @throws IOException */ public ArrayList execute() throws XmlPullParserException, IOException { ArrayList publicaciones = new ArrayList(); // Variable para controlar si nos encontramos dentro de la etiqueta // item, que es la que identifica las publicaciones. boolean insideItem = false; // Variables para título y link de las publicaciones. String headline = ""; String link = ""; // Variable que permitirá instanciar el XmlPullParser. XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xpp = factory.newPullParser(); // Le indicamos al parser la fuente que debe analizar. El método // getInputStream() está definido más abajo. xpp.setInput(getInputStream(new URL(url)), "UTF-8"); // Recogemos el tipo de evento en el que nos encontramos, esto indicará // si estamos en una etiqueta de inicio, de fin, o si se trata de un // texto. int event = xpp.getEventType(); // Hacemos que se analice el documento hasta el final del mismo. while (event != XmlPullParser.END_DOCUMENT) { // Si nos encontramos en una etiqueta de inicio analizamos en qué // etiqueta nos encontramos. if (event == XmlPullParser.START_TAG) { // Si es una etiqueta item cambiamos el valor de insideItem a // true, para posteriormente saber que estamos dentro de esta // etiqueta. if (xpp.getName().equalsIgnoreCase("item")) { insideItem = true; // Si es la etiqueta title, y previamente habíamos entrado // en un item recuperamos el título de la publicación. } else if (xpp.getName().equalsIgnoreCase("title") && insideItem) { headline = xpp.nextText(); // Si es la etiqueta link, y previamente habíamos entrado // en un item recuperamos el link de la publicación. } else if (xpp.getName().equalsIgnoreCase("link") && insideItem) { link = xpp.nextText(); } // Si es etiqueta de fin de item añadimos una nueva publicación // a la colección e indicamos que salimos del item cambiando el // valor de insideItem a false. } else if (event == XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")) { publicaciones.add(new Publicacion(headline, link)); insideItem = false; } // Recogemos el siguiente evento. event = xpp.next(); } // Una vez analizado el documento completo, devolvemos la colección de // publicaciones. return publicaciones; } /** * Conecta a la url indicada para recoger su contenido. * * @param url * @return InputStream con el contenido de la url */ public InputStream getInputStream(URL url) { try { return url.openConnection().getInputStream(); } catch (IOException e) { return null; } } } </pre> <h2>Dar permisos de Intenet</h2> <p>En este punto necesitamos conectar a Internet, a la dirección en la que se encuentra el XML que queremos analizar, y posteriormente analizarlo para crear nuestra colección de publicaciones y mostrarla en el <em>ListView</em>. Antes de olvidarnos <strong>vamos a darle el permiso de conexión a Internet a nuestra aplicación</strong>. De no hacer esto nuestra aplicación lanzaría una excepción cada vez que intentara conectarse a Internet que nos traería de cabeza, tras días de intentos fracasados veríamos el error, y al subsanarlo daríamos saltos de alegría (hablo de esta experiencia porque, aunque no me haya sucedido a mi, he visto a una persona en esta situación). Para hacer esto abrimos el archivo manifiest.xml de nuestro proyecto, y en él escribiremos la línea <strong><em></em></strong>, con lo que quedaría así:</p> <pre class="brush: xml; title: ; notranslate" title=""> <!--?xml version="1.0" encoding="utf-8"?--> </pre> <h2>Lanzar un Intent implícito para abrir el web browser</h2> <p>Con esto, al ejecutar nuestra aplicación ya podremos visualizar todos los datos, tan solo nos falta que al pulsar sobre una de las publicaciones <strong>se nos abra el navegador para mostrar la página</strong> en que se encuentra dicha publicación. Para eso volveremos a la <em>Activity </em>y añadiremos el siguiente código al método <em>onItemClick()</em>:</p> <pre class="brush: java; title: ; notranslate" title=""> // Recuperamos el link de la publicación seleccionada. String link = lvAdapter.getItem(position).getLink(); // Creamos un intent implicito para que el sistema escoja la aplicación // que debe utilizar. Intent i = new Intent(Intent.ACTION_VIEW); // Le añadimos la url que debe mostrar. i.setData(Uri.parse(link)); // Lanzamos la nueva Activity. startActivity(i); </pre> <p>Con esto habremos terminado nuestra aplicación, de nuevo aprovechando la <strong><em>Programación Orientada a Objetos</em></strong>, con uso de un <strong><em>AsyncTask </em></strong>para conectar a Internet, <strong><em>analizando un documento XML</em></strong> para recuperar los datos que necesitamos y usando <strong><em>Intents implícitos</em></strong> para abrir un navegador que nos muestre la página indicada.</p> <h2>Descargas</h2> <p>Puedes ver el resultado del ejemplo en tu móvil descargando nuestra aplicación desde <a href="https://play.google.com/store/apps/details?id=com.proyectosimio.proyectosimio" onclick="__gaTracker('send', 'event', 'outbound-article', 'https://play.google.com/store/apps/details?id=com.proyectosimio.proyectosimio', 'Google Play');" title="Aplicación oficial Proyecto Simio" target="_blank">Google Play</a>.</p> <p>El proyecto completo puede descargarse <a href="http://www.mediafire.com/download/hr5ayc5y1a7p9gu/ProyectoSimio.rar" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.mediafire.com/download/hr5ayc5y1a7p9gu/ProyectoSimio.rar', 'aquí');" title="Código fuente de la aplicacion ProyectoSimio" target="_blank">aquí</a>.</p> <!-- Simple Share Buttons Adder (6.3.4) simplesharebuttons.com --><div class="ssba ssba-wrap"><div style="text-align:left">Share if you like...<a href="http://www.facebook.com/sharer.php?u=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.facebook.com/sharer.php?u=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/', '');" data-site="" class="ssba_facebook_share" target="_blank"><img src="http://www.proyectosimio.com/wp-content/plugins/simple-share-buttons-adder/buttons/somacro/facebook.png" title="Facebook" class="ssba ssba-img" alt="Share on Facebook" /></a><span class="ssba_sharecount">0</span><a href="http://twitter.com/share?url=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/&text=Programaci%C3%B3n+Android%2C+AsyncTask+%E2%80%93+Conectar+a+Internet+y+leer+XML+via+%40IAvilaE" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://twitter.com/share?url=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/&text=Programaci%C3%B3n+Android%2C+AsyncTask+%E2%80%93+Conectar+a+Internet+y+leer+XML+via+%40IAvilaE', '');" data-site="" class="ssba_twitter_share" target="_blank"><img src="http://www.proyectosimio.com/wp-content/plugins/simple-share-buttons-adder/buttons/somacro/twitter.png" title="Twitter" class="ssba ssba-img" alt="Tweet about this on Twitter" /></a><a href="https://plus.google.com/share?url=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/" onclick="__gaTracker('send', 'event', 'outbound-article', 'https://plus.google.com/share?url=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/', '');" data-site="" class="ssba_google_share" target="_blank"><img src="http://www.proyectosimio.com/wp-content/plugins/simple-share-buttons-adder/buttons/somacro/google.png" title="Google+" class="ssba ssba-img" alt="Share on Google+" /></a><span class="ssba_sharecount">0</span><a href="http://www.linkedin.com/shareArticle?mini=true&url=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.linkedin.com/shareArticle?mini=true&url=http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/', '');" data-site="linkedin" class="ssba_linkedin_share ssba_share_link" target="_blank"><img src="http://www.proyectosimio.com/wp-content/plugins/simple-share-buttons-adder/buttons/somacro/linkedin.png" title="LinkedIn" class="ssba ssba-img" alt="Share on LinkedIn" /></a><span class="ssba_sharecount">0</span></div></div><div id="ts-fab-below" class="ts-fab-wrapper"><span class="screen-reader-text">The following two tabs change content below.</span><ul class="ts-fab-list"><li class="ts-fab-bio-link"><a href="#ts-fab-bio-below">Bio</a></li><li class="ts-fab-latest-posts-link"><a href="#ts-fab-latest-posts-below">Latest Posts</a></li></ul><div class="ts-fab-tabs"> <div class="ts-fab-tab" id="ts-fab-bio-below"> <div class="ts-fab-avatar"><img alt='' src='http://0.gravatar.com/avatar/0206f98369032dac7f3e7074653d974a?s=80&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D80&r=G' class='avatar avatar-80 photo' height='80' width='80' /><div class="ts-fab-social-links"><a href="https://twitter.com/IAvilaE" title="Twitter" rel="nofollow"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/twitter.png" width="24" height="24" alt="My Twitter profile" /></a><a href="https://www.facebook.com/igor.avila.71" title="Facebook" rel="nofollow"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/facebook.png" width="24" height="24" alt="My Facebook profile" /></a><a href="https://plus.google.com/u/1/100034123294713914634/posts?rel=author" title="Google+"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/googleplus.png" width="24" height="24" alt="My Google+ profile" /></a><a href="https://www.linkedin.com/in/iavilae" title="LinkedIn" rel="nofollow"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/linkedin.png" width="24" height="24" alt="My LinkedIn profile" /></a></div> </div> <div class="ts-fab-text"> <div class="ts-fab-header"><h4><a href="http://www.proyectosimio.com" rel="nofollow">IAvilaE</a></h4></div><!-- /.ts-fab-header --> <div class="ts-fab-content">Reborn as IT Developer. Desarrollador Android y fundador de Proyecto Simio. "En realidad, yo no puedo enseñar nada a nadie, sólo puedo hacerles pensar." - Sócrates.</div> </div> </div> <div class="ts-fab-tab" id="ts-fab-latest-posts-below"> <div class="ts-fab-avatar"><img alt='' src='http://0.gravatar.com/avatar/0206f98369032dac7f3e7074653d974a?s=80&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D80&r=G' class='avatar avatar-80 photo' height='80' width='80' /><div class="ts-fab-social-links"><a href="https://twitter.com/IAvilaE" title="Twitter" rel="nofollow"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/twitter.png" width="24" height="24" alt="My Twitter profile" /></a><a href="https://www.facebook.com/igor.avila.71" title="Facebook" rel="nofollow"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/facebook.png" width="24" height="24" alt="My Facebook profile" /></a><a href="https://plus.google.com/u/1/100034123294713914634/posts?rel=author" title="Google+" rel="nofollow"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/googleplus.png" width="24" height="24" alt="My Google+ profile" /></a><a href="https://www.linkedin.com/in/iavilae" title="LinkedIn" rel="nofollow"><img src="http://www.proyectosimio.com/wp-content/plugins/fancier-author-box/images/linkedin.png" width="24" height="24" alt="My LinkedIn profile" /></a></div> </div> <div class="ts-fab-text"> <div class="ts-fab-header"> <h4>Latest posts by IAvilaE <span class="latest-see-all">(<a href="http://www.proyectosimio.com/es/author/iavilae/" rel="nofollow">see all</a>)</span></h4> </div> <ul class="ts-fab-latest"> <li> <a href="http://www.proyectosimio.com/es/programacion-android-como-hacer-pull-to-refresh-swiperefreshlayout/">Programación Android, Cómo usar SwipeRefreshLayout</a><span> - 26 abril 2015</span> </li> <li> <a href="http://www.proyectosimio.com/es/programacion-android-gson-libreria-para-parsear-documentos-json/">Programación Android, Gson – Librería para parsear documentos JSON</a><span> - 13 febrero 2015</span> </li> <li> <a href="http://www.proyectosimio.com/es/programacion-android-como-usar-multiples-fragments-ii/">Programación Android, Cómo usar múltiples Fragments II</a><span> - 24 enero 2015</span> </li> </ul></div> </div> </div> </div><div class='yarpp-related'> <h3>Posts relacionados:</h3> <div class="yarpp-thumbnails-horizontal"> <a class='yarpp-thumbnail' href='http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-documentos-json/' title='Programación Android, AsyncTask – Conectar a Internet y leer documentos JSON'> <img width="115" height="120" src="http://www.proyectosimio.com/wp-content/uploads/2013/12/json.jpg" class="attachment-yarpp-thumbnail wp-post-image" alt="json" /><span class="yarpp-thumbnail-title">Programación Android, AsyncTask – Conectar a Internet y leer documentos JSON</span></a> <a class='yarpp-thumbnail' href='http://www.proyectosimio.com/es/programacion-android-recursos-xml-i/' title='Programación Android, Recursos XML I'> <img width="110" height="120" src="http://www.proyectosimio.com/wp-content/uploads/2013/04/android_resources.png" class="attachment-yarpp-thumbnail wp-post-image" alt="android_resources" /><span class="yarpp-thumbnail-title">Programación Android, Recursos XML I</span></a> <a class='yarpp-thumbnail' href='http://www.proyectosimio.com/es/programacion-android-recursos-xml-ii/' title='Programación Android, Recursos XML II'> <img width="110" height="120" src="http://www.proyectosimio.com/wp-content/uploads/2013/04/android_resources.png" class="attachment-yarpp-thumbnail wp-post-image" alt="android_resources" /><span class="yarpp-thumbnail-title">Programación Android, Recursos XML II</span></a> <a class='yarpp-thumbnail' href='http://www.proyectosimio.com/es/programacion-android-recursos-xml-iii-shape/' title='Programación Android, Recursos XML III (Shape)'> <img width="110" height="120" src="http://www.proyectosimio.com/wp-content/uploads/2013/04/android_resources.png" class="attachment-yarpp-thumbnail wp-post-image" alt="android_resources" /><span class="yarpp-thumbnail-title">Programación Android, Recursos XML III (Shape)</span></a> <a class='yarpp-thumbnail' href='http://www.proyectosimio.com/es/programacion-android-leer-y-escribir-archivos-en-memoria-interna-lanzar-alarmas/' title='Programación Android, leer y escribir archivos en memoria interna. Lanzar alarmas'> <img width="120" height="112" src="http://www.proyectosimio.com/wp-content/uploads/2013/05/android-archivador.jpg" class="attachment-yarpp-thumbnail wp-post-image" alt="android-archivador" /><span class="yarpp-thumbnail-title">Programación Android, leer y escribir archivos en memoria interna. Lanzar alarmas</span></a> </div> </div> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links col-lg-6 col-md-6 col-sm-12 col-xs-12"><a href="http://www.proyectosimio.com/es/category/programacion/android/" rel="category tag">Android</a>, <a href="http://www.proyectosimio.com/es/category/programacion/java/" rel="category tag">Java</a>, <a href="http://www.proyectosimio.com/es/category/programacion/" rel="category tag">Programación</a>, <a href="http://www.proyectosimio.com/es/category/programacion/xml/" rel="category tag">XML</a></span><span class="tags-links col-lg-6 col-md-6 col-sm-12 col-xs-12"><a href="http://www.proyectosimio.com/es/tag/asynctask/" rel="tag">AsyncTask</a>, <a href="http://www.proyectosimio.com/es/tag/intent-implicito/" rel="tag">Intent implícito</a>, <a href="http://www.proyectosimio.com/es/tag/internet/" rel="tag">Internet</a>, <a href="http://www.proyectosimio.com/es/tag/poo/" rel="tag">POO</a>, <a href="http://www.proyectosimio.com/es/tag/programacion-orientada-a-objetos/" rel="tag">programación orientada a objetos</a>, <a href="http://www.proyectosimio.com/es/tag/xml/" rel="tag">XML</a>, <a href="http://www.proyectosimio.com/es/tag/xmlpullparser/" rel="tag">XmlPullParser</a></span> </footer><!-- .entry-footer --> <div class = "pattern"> </div> </article><!-- #post-## --> <nav class="navigation post-navigation" role="navigation"> <h1 class="screen-reader-text">Post navigation</h1> <div class="nav-links"> <div class="nav-previous">Previous<br><a href="http://www.proyectosimio.com/es/programacion-android-ejemplo-de-bases-de-datos-listview-iv/" rel="prev"><span class="meta-nav"></span> Programación Android, Ejemplo de Bases de datos & ListView IV</a></div><div class="nav-next">Next<br><a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-documentos-json/" rel="next">Programación Android, AsyncTask – Conectar a Internet y leer documentos JSON <span class="meta-nav"></span></a></div> </div><!-- .nav-links --> </nav><!-- .navigation --> <div id="comments" class="comments-area"> <h2 class="comments-title"> 12 thoughts on “<span>Programación Android, AsyncTask – Conectar a Internet y leer XML</span>” </h2> <ol class="comment-list"> <li id="comment-38382" class="comment even thread-even depth-1 parent"> <article id="div-comment-38382" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/8d4416e3f79cca02b3a51a21bbbd327e?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn">Jonathan</b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-38382"> <time datetime="2015-04-22T21:42:34+00:00"> 22 abril 2015 a las 21:42 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Muy buenp el codigo funciona a la perfeccion, consulta estara el codigo para generar el XML, para yo poder creo lo mismo pero con otras dorecciones, atento a sus comentarios</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=38382#respond' onclick='return addComment.moveForm( "div-comment-38382", "38382", "respond", "1028" )' aria-label='Responder a Jonathan'>Responder</a></div> </article><!-- .comment-body --> <ol class="children"> <li id="comment-38383" class="comment byuser comment-author-iavilae bypostauthor odd alt depth-2"> <article id="div-comment-38383" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/0206f98369032dac7f3e7074653d974a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn"><a href='http://www.proyectosimio.com' rel='external nofollow' class='url'>IAvilaE</a></b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-38383"> <time datetime="2015-04-22T21:54:29+00:00"> 22 abril 2015 a las 21:54 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Muchas gracias por el comentario <img src="http://www.proyectosimio.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p> <p>En Internet puedes encontrar múltiples ejemplos sobre cómo escribir archivos xml, te paso un ejemplo:<br /> <a href="http://www.ibm.com/developerworks/opensource/library/x-android/index.html#N101E0" rel="nofollow">http://www.ibm.com/developerworks/opensource/library/x-android/index.html#N101E0</a></p> <p>Un saludo.</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=38383#respond' onclick='return addComment.moveForm( "div-comment-38383", "38383", "respond", "1028" )' aria-label='Responder a IAvilaE'>Responder</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> </ol><!-- .children --> </li><!-- #comment-## --> <li id="comment-34031" class="comment even thread-odd thread-alt depth-1 parent"> <article id="div-comment-34031" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/88708ebf0e555c8916691501f45d3db0?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn">Kenny Iparraguirre Meza</b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-34031"> <time datetime="2015-03-09T18:28:55+00:00"> 9 marzo 2015 a las 18:28 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Algo desactualizado pero agradeceria si alguien me guia en esta lina:</p> <p>// Añadimos todas las publicaciones al Adapter.<br /> for (Publicacion tmp : publicaciones)<br /> adapter.add(tmp);</p> <p>Cuando ejecuto la aplicacion me sale error, diciendome:</p> <p>Unfortunately, Proyecto Simio has stopped.</p> <p>Gracias</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=34031#respond' onclick='return addComment.moveForm( "div-comment-34031", "34031", "respond", "1028" )' aria-label='Responder a Kenny Iparraguirre Meza'>Responder</a></div> </article><!-- .comment-body --> <ol class="children"> <li id="comment-34033" class="comment byuser comment-author-iavilae bypostauthor odd alt depth-2 parent"> <article id="div-comment-34033" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/0206f98369032dac7f3e7074653d974a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn"><a href='http://www.proyectosimio.com' rel='external nofollow' class='url'>IAvilaE</a></b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-34033"> <time datetime="2015-03-10T13:43:56+00:00"> 10 marzo 2015 a las 13:43 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Tranquilo, los posts nunca están desactualizados, atendemos a las dudas siempre <img src="http://www.proyectosimio.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p> <p>Tendrías que hacer debug para ver exactamente tu problema, pero en esas líneas pueden haber 2 errores:<br /> – El objeto publicaciones es null.<br /> – El objeto adapter es null.</p> <p>Eso significa que uno de esos dos objetos no se han inicializado de forma correcta, por lo que tendrás que hacer debug, comprobar qué pasa realmente cuál es el problema y así poder resolverlo.</p> <p>Un saludo.</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=34033#respond' onclick='return addComment.moveForm( "div-comment-34033", "34033", "respond", "1028" )' aria-label='Responder a IAvilaE'>Responder</a></div> </article><!-- .comment-body --> <ol class="children"> <li id="comment-40240" class="comment even depth-3 parent"> <article id="div-comment-40240" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/e969eb409cf1436136e5305b09486697?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn">Chory</b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-40240"> <time datetime="2015-10-27T14:15:26+00:00"> 27 octubre 2015 a las 14:15 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Creo que problema es que la url no es correcta, vosotros teneis definida esta<br /> <a href="http://proyectosimio.wordpress.com/feed/" rel="nofollow">http://proyectosimio.wordpress.com/feed/</a><br /> Y la que, por lo menos a mime funciona es esta<br /> <a href="http://www.proyectosimio.com/es/feed/" rel="nofollow">http://www.proyectosimio.com/es/feed/</a></p> <p>Gracias por el tuto, ahora me toca estudiarlo.</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=40240#respond' onclick='return addComment.moveForm( "div-comment-40240", "40240", "respond", "1028" )' aria-label='Responder a Chory'>Responder</a></div> </article><!-- .comment-body --> <ol class="children"> <li id="comment-40241" class="comment byuser comment-author-iavilae bypostauthor odd alt depth-4"> <article id="div-comment-40241" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/0206f98369032dac7f3e7074653d974a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn"><a href='http://www.proyectosimio.com' rel='external nofollow' class='url'>IAvilaE</a></b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-40241"> <time datetime="2015-10-27T15:28:58+00:00"> 27 octubre 2015 a las 15:28 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Fallo mío! Totalmente cierto, la url cambió después de hacer el post y no me di cuenta de actualizarlo.</p> <p>Gracias por el aviso, lo cambio ahora mismo <img src="http://www.proyectosimio.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=40241#respond' onclick='return addComment.moveForm( "div-comment-40241", "40241", "respond", "1028" )' aria-label='Responder a IAvilaE'>Responder</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> </ol><!-- .children --> </li><!-- #comment-## --> </ol><!-- .children --> </li><!-- #comment-## --> </ol><!-- .children --> </li><!-- #comment-## --> <li id="comment-2378" class="comment even thread-even depth-1 parent"> <article id="div-comment-2378" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/c7b474954df9340ef175c61180e3815e?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn">ilse</b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-2378"> <time datetime="2014-11-10T22:18:34+00:00"> 10 noviembre 2014 a las 22:18 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Hola, tengo unas dudas, intente hacer tal cual tu código, pero no me sale, no se si podrías pasarme el código, tengo hecho un programa aparte pero el mio descarga el XML y luego del celular lo lee, me intereso mucho el que solo leyeras la información sin necesidad de descargar.<br /> Gracias de antemano</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=2378#respond' onclick='return addComment.moveForm( "div-comment-2378", "2378", "respond", "1028" )' aria-label='Responder a ilse'>Responder</a></div> </article><!-- .comment-body --> <ol class="children"> <li id="comment-2385" class="comment byuser comment-author-iavilae bypostauthor odd alt depth-2 parent"> <article id="div-comment-2385" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/0206f98369032dac7f3e7074653d974a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn"><a href='http://www.proyectosimio.com' rel='external nofollow' class='url'>IAvilaE</a></b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-2385"> <time datetime="2014-11-10T23:35:57+00:00"> 10 noviembre 2014 a las 23:35 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Buenas Ilse, puedes descargar el código desde el enlace que hay al final del post <img src="http://www.proyectosimio.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p> <p>Un saludo.</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=2385#respond' onclick='return addComment.moveForm( "div-comment-2385", "2385", "respond", "1028" )' aria-label='Responder a IAvilaE'>Responder</a></div> </article><!-- .comment-body --> <ol class="children"> <li id="comment-2393" class="comment even depth-3"> <article id="div-comment-2393" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/c7b474954df9340ef175c61180e3815e?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn">ilse</b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-2393"> <time datetime="2014-11-11T00:44:11+00:00"> 11 noviembre 2014 a las 00:44 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Muchas gracias perdona la molestia, no lo había visto =P</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=2393#respond' onclick='return addComment.moveForm( "div-comment-2393", "2393", "respond", "1028" )' aria-label='Responder a ilse'>Responder</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> </ol><!-- .children --> </li><!-- #comment-## --> </ol><!-- .children --> </li><!-- #comment-## --> <li id="comment-742" class="comment odd alt thread-odd thread-alt depth-1 parent"> <article id="div-comment-742" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/c6df7e530bdcaed1b495a22cc7847194?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn">jule</b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-742"> <time datetime="2014-10-16T07:29:11+00:00"> 16 octubre 2014 a las 07:29 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>for (Publicacion tmp : publicaciones)<br /> adapter.add(tmp);</p> <p>me dice incompatible types qye sera?</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=742#respond' onclick='return addComment.moveForm( "div-comment-742", "742", "respond", "1028" )' aria-label='Responder a jule'>Responder</a></div> </article><!-- .comment-body --> <ol class="children"> <li id="comment-744" class="comment byuser comment-author-iavilae bypostauthor even depth-2"> <article id="div-comment-744" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://0.gravatar.com/avatar/0206f98369032dac7f3e7074653d974a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn"><a href='http://www.proyectosimio.com' rel='external nofollow' class='url'>IAvilaE</a></b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-744"> <time datetime="2014-10-16T08:15:47+00:00"> 16 octubre 2014 a las 08:15 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Buenas Jule,</p> <p>Puede ser que no hayas parametrizado la colección?</p> <p>Un saludo.</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=744#respond' onclick='return addComment.moveForm( "div-comment-744", "744", "respond", "1028" )' aria-label='Responder a IAvilaE'>Responder</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> </ol><!-- .children --> </li><!-- #comment-## --> <li id="comment-320" class="comment odd alt thread-even depth-1"> <article id="div-comment-320" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='http://1.gravatar.com/avatar/122b3c9fff9e5ca460adf43cde2e50f5?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G' class='avatar avatar-32 photo' height='32' width='32' /> <b class="fn"><a href='http://gravatar.com/tuxoroot' rel='external nofollow' class='url'>Alfredo</a></b> <span class="says">dice:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#comment-320"> <time datetime="2014-04-30T22:47:13+00:00"> 30 abril 2014 a las 22:47 </time> </a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Excelente blog, y muy buena información. Me ha sido de mucha utilidad.</p> </div><!-- .comment-content --> <div class="reply"><a class='comment-reply-link' href='/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/?replytocom=320#respond' onclick='return addComment.moveForm( "div-comment-320", "320", "respond", "1028" )' aria-label='Responder a Alfredo'>Responder</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> </ol><!-- .comment-list --> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Deja un comentario <small><a rel="nofollow" id="cancel-comment-reply-link" href="/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/#respond" style="display:none;">Cancelar respuesta</a></small></h3> <div id="commentform" class="comment-form"> <iframe src="http://jetpack.wordpress.com/jetpack-comment/?blogid=63145129&postid=1028&comment_registration=0&require_name_email=1&stc_enabled=1&stb_enabled=1&show_avatars=1&avatar_default=mystery&greeting=Deja+un+comentario&greeting_reply=Responder+a+%25s&color_scheme=light&lang=es-ES&jetpack_version=3.6.1&sig=95bac9f493b83ce6918c50c9d425d180bb11030a#parent=http%3A%2F%2Fwww.proyectosimio.com%2Fes%2Fprogramacion-android-asynctask-conectar-a-internet-y-leer-xml%2F" allowtransparency="false" style="width:100%; height: 430px;border:0px;" frameBorder="0" scrolling="no" name="jetpack_remote_comment" id="jetpack_remote_comment"></iframe> </div> </div> <input type="hidden" name="comment_parent" id="comment_parent" value="" /> </div><!-- #comments --> </main><!-- #main --> </div><!-- #primary --> <div id="secondary" class="widget-area col-lg-4 col-md-4 col-sm-12 col-xs-12" role="complementary"> <aside id="blog_subscription-2" class="widget jetpack_subscription_widget"><h1 class="widget-title">Suscríbete al blog por correo electrónico</h1> <form action="#" method="post" accept-charset="utf-8" id="subscribe-blog-blog_subscription-2"> <div id="subscribe-text"><p>Introduce tu correo electrónico para suscribirte a este blog y recibir notificaciones de nuevas entradas.</p> </div> <p id="subscribe-email"> <label id="jetpack-subscribe-label" for="subscribe-field"> Dirección de email </label> <input type="email" name="email" required="required" class="required" value="" id="subscribe-field-blog_subscription-2" placeholder="Dirección de email" /> </p> <p id="subscribe-submit"> <input type="hidden" name="action" value="subscribe" /> <input type="hidden" name="source" value="http://www.proyectosimio.com/es/programacion-android-asynctask-conectar-a-internet-y-leer-xml/" /> <input type="hidden" name="sub-type" value="widget" /> <input type="hidden" name="redirect_fragment" value="blog_subscription-2" /> <input type="submit" value="Suscribir" name="jetpack_subscriptions_widget" /> </p> </form> <script> /* Custom functionality for safari and IE */ (function( d ) { // Creates placeholders for IE if ( ( 'placeholder' in d.createElement( 'input' ) ) ) { var label = d.getElementById( 'jetpack-subscribe-label' ); label.style.clip = 'rect(1px, 1px, 1px, 1px)'; label.style.position = 'absolute'; label.style.height = '1px'; label.style.width = '1px'; label.style.overflow = 'hidden'; } // Make sure the email value is filled in before allowing submit var form = d.getElementById('subscribe-blog-blog_subscription-2'), input = d.getElementById('subscribe-field-blog_subscription-2'), handler = function( event ) { if ( '' === input.value ) { input.focus(); if ( event.preventDefault ){ event.preventDefault(); } return false; } }; if ( window.addEventListener ) { form.addEventListener( 'submit', handler, false ); } else { form.attachEvent( 'onsubmit', handler ); } })( document ); </script> </aside><aside id="text-3" class="widget widget_text"><h1 class="widget-title">Descarga la App oficial de Proyecto Simio</h1> <div class="textwidget"><a href="https://play.google.com/store/apps/details?id=com.proyectosimio.proyectosimio" target="_blank" title="App Proyecto Simio"><img class="aligncenter" src="http://www.proyectosimio.com/wp-content/uploads/2013/12/launcherhd.png" style="border:10px;" /></a></div> </aside><aside id="calendar-2" class="widget widget_calendar"><div id="calendar_wrap"><table id="wp-calendar"> <caption>septiembre 2017</caption> <thead> <tr> <th scope="col" title="Lunes">L</th> <th scope="col" title="Martes">M</th> <th scope="col" title="Miércoles">X</th> <th scope="col" title="Jueves">J</th> <th scope="col" title="Viernes">V</th> <th scope="col" title="Sábado">S</th> <th scope="col" title="Domingo">D</th> </tr> </thead> <tfoot> <tr> <td colspan="3" id="prev"><a href="http://www.proyectosimio.com/es/2015/04/">« abr</a></td> <td class="pad"> </td> <td colspan="3" id="next" class="pad"> </td> </tr> </tfoot> <tbody> <tr> <td colspan="4" class="pad"> </td><td>1</td><td>2</td><td>3</td> </tr> <tr> <td>4</td><td>5</td><td id="today">6</td><td>7</td><td>8</td><td>9</td><td>10</td> </tr> <tr> <td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td> </tr> <tr> <td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td> </tr> <tr> <td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td> <td class="pad" colspan="1"> </td> </tr> </tbody> </table></div></aside><aside id="categories-2" class="widget widget_categories"><h1 class="widget-title">Categorías</h1> <ul> <li class="cat-item cat-item-2"><a href="http://www.proyectosimio.com/es/category/linux/" title="Entradas relacionadas con el OS Linux">Linux</a> </li> <li class="cat-item cat-item-3"><a href="http://www.proyectosimio.com/es/category/noticias/" >Noticias</a> </li> <li class="cat-item cat-item-4"><a href="http://www.proyectosimio.com/es/category/programacion/" title="Lenguajes de programación">Programación</a> <ul class='children'> <li class="cat-item cat-item-8"><a href="http://www.proyectosimio.com/es/category/programacion/android/" title="Programación en Android">Android</a> </li> <li class="cat-item cat-item-9"><a href="http://www.proyectosimio.com/es/category/programacion/c/" title="Programación en C#">C#</a> </li> <li class="cat-item cat-item-229"><a href="http://www.proyectosimio.com/es/category/programacion/ios/" title="Programación iOS">iOS</a> </li> <li class="cat-item cat-item-10"><a href="http://www.proyectosimio.com/es/category/programacion/java/" >Java</a> </li> <li class="cat-item cat-item-209"><a href="http://www.proyectosimio.com/es/category/programacion/php/" title="Programación php">PHP</a> </li> <li class="cat-item cat-item-7"><a href="http://www.proyectosimio.com/es/category/programacion/xml/" >XML</a> </li> </ul> </li> <li class="cat-item cat-item-6"><a href="http://www.proyectosimio.com/es/category/utilidades/" >Utilidades</a> </li> </ul> </aside></div><!-- #secondary --> </div><!-- #content --> </div><!-- #page --> <footer id="colophon" class="site-footer" role="contentinfo"> <div id="footer-sidebar" class="widget-area clear container" role="complementary"> </div> <div class="site-info"> © 2015 www.proyectosimio.com. All Rights Reserved. </div><!-- .site-info --> </footer><!-- #colophon --> <style type="text/css" media="screen"> #bit, #bit * {} #bit { bottom: -300px; font: 13px "Helvetica Neue",sans-serif; position: fixed; right: 10px; z-index: 999999; } .loggedout-follow-typekit { margin-right: 4.5em; } #bit a.bsub { background-color: #464646; background-image: -moz-linear-gradient(center bottom , #3F3F3F, #464646 5px); border: 0 none; box-shadow: 0 -1px 5px rgba(0, 0, 0, 0.2); color: #CCCCCC; display: block; float: right; font: 13px/28px "Helvetica Neue",sans-serif; letter-spacing: normal; outline-style: none; outline-width: 0; overflow: hidden; padding: 0 10px 0 8px; text-decoration: none !important; text-shadow: 0 -1px 0 #444444; } #bit a.bsub { border-radius: 2px 2px 0 0; } #bit a.bsub span { background-attachment: scroll; background-clip: border-box; background-color: transparent; background-image: url(http://www.proyectosimio.com/es/wp-content/plugins/follow/include/star.png); background-origin: padding-box; background-position: 2px 3px; background-repeat: no-repeat; background-size: 20% auto; padding-left: 18px; } #bit a:hover span, #bit a.bsub.open span { /*background-position: 0 -117px;*/ color: #FFFFFF !important; } #bit a.bsub.open { background: none repeat scroll 0 0 #333333; } #bitsubscribe { background: none repeat scroll 0 0 #464646; border-radius: 2px 0 0 0; color: #FFFFFF; margin-top: 27px; padding: 15px; width: 200px; } div#bitsubscribe.open { box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); } #bitsubscribe div { overflow: hidden; } #bit h3, #bit #bitsubscribe h3 { color: #FFFFFF; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 20px; font-weight: 300; margin: 0 0 0.5em !important; text-align: left; text-shadow: 0 1px 0 #333333; } #bit #bitsubscribe p { color: #FFFFFF; font: 300 15px/1.3em "Helvetica Neue",Helvetica,Arial,sans-serif; margin: 0 0 1em; text-shadow: 0 1px 0 #333333; } #bitsubscribe p a { margin: 20px 0 0; } #bit #bitsubscribe p.bit-follow-count { font-size: 13px; } #bitsubscribe input[type="submit"] { -moz-transition: all 0.25s ease-in-out 0s; background: -moz-linear-gradient(center top , #333333 0%, #111111 100%) repeat scroll 0 0 transparent; border: 0px solid #282828; border-radius: 11px 11px 11px 11px; box-shadow: 0 1px 0 #444444 inset; color: #000000; padding: 0.4px 20px; text-decoration: none; text-shadow: 0 1px 0 #CCCCCC; } #bitsubscribe input[type="submit"]:hover { background: -moz-linear-gradient(center top , #333333 0%, #222222 100%) repeat scroll 0 0 transparent; box-shadow: 0 1px 0 #4F4F4F inset; color: #FFFFFF; text-decoration: none; } #bitsubscribe input[type="submit"]:active { background: -moz-linear-gradient(center top , #111111 0%, #222222 100%) repeat scroll 0 0 transparent; box-shadow: 0 -1px 0 #333333 inset; color: #AAAAAA; text-decoration: none; } #bitsubscribe input[type="text"] { border-radius: 3px 3px 3px 3px; font: 300 15px "Helvetica Neue",Helvetica,Arial,sans-serif; } #bitsubscribe input[type="text"]:focus { border: 1px solid #000000; } #bitsubscribe.open { display: block; } #bsub-subscribe-button { margin: 0 auto; text-align: center; } #bitsubscribe #bsub-credit { border-top: 1px solid #3C3C3C; font: 11px "Helvetica Neue",sans-serif; margin: 0 0 -15px; padding: 7px 0; text-align: center; } #bitsubscribe #bsub-credit a { background: none repeat scroll 0 0 transparent; color: #AAAAAA; text-decoration: none; text-shadow: 0 1px 0 #262626; } #bitsubscribe #bsub-credit a:hover { background: none repeat scroll 0 0 transparent; color: #FFFFFF; } </style> <script type="text/javascript" charset="utf-8"> jQuery.extend(jQuery.easing, { easeOutCubic: function (x, t, b, c, d) { return c * ((t = t / d - 1) * t * t + 1) + b; } }); jQuery(document).ready(function () { var isopen = false, bitHeight = jQuery('#bitsubscribe').height(); setTimeout(function () { jQuery('#bit').animate({ bottom: '-' + bitHeight - 30 + 'px' }, 200); }, 300); jQuery('#bit a.bsub').click(function () { if (!isopen) { isopen = true; jQuery('#bit a.bsub').addClass('open'); jQuery('#bit #bitsubscribe').addClass('open') jQuery('#bit').stop(); jQuery('#bit').animate({ bottom: '0px' }, { duration: 400, easing: "easeOutCubic" }); } else { isopen = false; jQuery('#bit').stop(); jQuery('#bit').animate({ bottom: '-' + bitHeight - 30 + 'px' }, 200, function () { jQuery('#bit a.bsub').removeClass('open'); jQuery('#bit #bitsubscribe').removeClass('open'); }); } }); }); </script> <div id="bit" class=""> <a class="bsub" href="javascript:void(0)"><span id='bsub-text'>Follow</span></a> <div id="bitsubscribe"> <h3><label for="loggedout-follow-field">Follow Proyecto Simio</label></h3> <form action=http://www.proyectosimio.com/es/subscribe/ method="post" accept-charset="utf-8" id="loggedout-follow"> <p>Get every new post on this blog delivered to your Inbox.</p> <p class="bit-follow-count">Join other followers:</p> <p> <input type="text" name="email" id="s2email" style="width: 95%; padding: 1px 2px" value="Enter email address" onfocus='this.value=(this.value=="Enter email address") ? "" : this.value;' onblur='this.value=(this.value=="") ? "Enter email address" : this.value;' id="loggedout-follow-field"/> </p> <input type="hidden" name="ip" value="113.119.6.38"> <p id='bsub-subscribe-button'> <input type="submit" name="subscribe" value="Sign me up!" /> </p> </form> </div> </div> <div style="display:none"> <div class="grofile-hash-map-0206f98369032dac7f3e7074653d974a"> </div> <div class="grofile-hash-map-8d4416e3f79cca02b3a51a21bbbd327e"> </div> <div class="grofile-hash-map-88708ebf0e555c8916691501f45d3db0"> </div> <div class="grofile-hash-map-e969eb409cf1436136e5305b09486697"> </div> <div class="grofile-hash-map-c7b474954df9340ef175c61180e3815e"> </div> <div class="grofile-hash-map-c6df7e530bdcaed1b495a22cc7847194"> </div> <div class="grofile-hash-map-122b3c9fff9e5ca460adf43cde2e50f5"> </div> </div> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/plugins/akismet/_inc/form.js?ver=3.3'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver=3.0.9b'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver=3.0.9b'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJava.js?ver=3.0.9b'></script> <script type='text/javascript'> (function(){ var corecss = document.createElement('link'); var themecss = document.createElement('link'); var corecssurl = "http://www.proyectosimio.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.9b"; if ( corecss.setAttribute ) { corecss.setAttribute( "rel", "stylesheet" ); corecss.setAttribute( "type", "text/css" ); corecss.setAttribute( "href", corecssurl ); } else { corecss.rel = "stylesheet"; corecss.href = corecssurl; } document.getElementsByTagName("head")[0].insertBefore( corecss, document.getElementById("syntaxhighlighteranchor") ); var themecssurl = "http://www.proyectosimio.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeEclipse.css?ver=3.0.9b"; if ( themecss.setAttribute ) { themecss.setAttribute( "rel", "stylesheet" ); themecss.setAttribute( "type", "text/css" ); themecss.setAttribute( "href", themecssurl ); } else { themecss.rel = "stylesheet"; themecss.href = themecssurl; } //document.getElementById("syntaxhighlighteranchor").appendChild(themecss); document.getElementsByTagName("head")[0].insertBefore( themecss, document.getElementById("syntaxhighlighteranchor") ); })(); SyntaxHighlighter.config.strings.expandSource = '+ expand source'; SyntaxHighlighter.config.strings.help = '?'; SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter\n\n'; SyntaxHighlighter.config.strings.noBrush = 'Can\'t find brush for: '; SyntaxHighlighter.config.strings.brushNotHtmlScript = 'Brush wasn\'t configured for html-script option: '; SyntaxHighlighter.defaults['pad-line-numbers'] = false; SyntaxHighlighter.defaults['toolbar'] = false; SyntaxHighlighter.all(); </script> <link rel='stylesheet' id='yarppRelatedCss-css' href='http://www.proyectosimio.com/wp-content/plugins/yet-another-related-posts-plugin/style/related.css?ver=4.1.18' type='text/css' media='all' /> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/plugins/simple-share-buttons-adder/js/ssba.min.js?ver=4.1.18'></script> <script type='text/javascript' src='http://s0.wp.com/wp-content/js/devicepx-jetpack.js?ver=201736'></script> <script type='text/javascript' src='http://s.gravatar.com/js/gprofiles.js?ver=2017Sepaa'></script> <script type='text/javascript'> /* <![CDATA[ */ var WPGroHo = {"my_hash":""}; /* ]]> */ </script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/plugins/jetpack/modules/wpgroho.js?ver=4.1.18'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/themes/simpel/js/navigation.js?ver=20120206'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/themes/simpel/js/skip-link-focus-fix.js?ver=20130115'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/comment-reply.min.js?ver=4.1.18'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/core.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/widget.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/mouse.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/resizable.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/draggable.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/button.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/position.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-includes/js/jquery/ui/dialog.min.js?ver=1.11.2'></script> <script type='text/javascript' src='http://www.proyectosimio.com/wp-content/plugins/youtube-embed-plus/scripts/fitvids.min.js?ver=4.1.18'></script> <!--[if IE]> <script type="text/javascript"> if ( 0 === window.location.hash.indexOf( '#comment-' ) ) { // window.location.reload() doesn't respect the Hash in IE window.location.hash = window.location.hash; } </script> <![endif]--> <script type="text/javascript"> var comm_par_el = document.getElementById( 'comment_parent' ), comm_par = (comm_par_el && comm_par_el.value) ? comm_par_el.value : '', frame = document.getElementById( 'jetpack_remote_comment' ), tellFrameNewParent; tellFrameNewParent = function() { if ( comm_par ) { frame.src = "http://jetpack.wordpress.com/jetpack-comment/?blogid=63145129&postid=1028&comment_registration=0&require_name_email=1&stc_enabled=1&stb_enabled=1&show_avatars=1&avatar_default=mystery&greeting=Deja+un+comentario&greeting_reply=Responder+a+%25s&color_scheme=light&lang=es-ES&jetpack_version=3.6.1&sig=95bac9f493b83ce6918c50c9d425d180bb11030a#parent=http%3A%2F%2Fwww.proyectosimio.com%2Fes%2Fprogramacion-android-asynctask-conectar-a-internet-y-leer-xml%2F" + '&replytocom=' + parseInt( comm_par, 10 ).toString(); } else { frame.src = "http://jetpack.wordpress.com/jetpack-comment/?blogid=63145129&postid=1028&comment_registration=0&require_name_email=1&stc_enabled=1&stb_enabled=1&show_avatars=1&avatar_default=mystery&greeting=Deja+un+comentario&greeting_reply=Responder+a+%25s&color_scheme=light&lang=es-ES&jetpack_version=3.6.1&sig=95bac9f493b83ce6918c50c9d425d180bb11030a#parent=http%3A%2F%2Fwww.proyectosimio.com%2Fes%2Fprogramacion-android-asynctask-conectar-a-internet-y-leer-xml%2F"; } }; if ( 'undefined' !== typeof addComment ) { addComment._Jetpack_moveForm = addComment.moveForm; addComment.moveForm = function( commId, parentId, respondId, postId ) { var returnValue = addComment._Jetpack_moveForm( commId, parentId, respondId, postId ), cancelClick, cancel; if ( false === returnValue ) { cancel = document.getElementById( 'cancel-comment-reply-link' ); cancelClick = cancel.onclick; cancel.onclick = function() { var cancelReturn = cancelClick.call( this ); if ( false !== cancelReturn ) { return cancelReturn; } if ( !comm_par ) { return cancelReturn; } comm_par = 0; tellFrameNewParent(); return cancelReturn; }; } if ( comm_par == parentId ) { return returnValue; } comm_par = parentId; tellFrameNewParent(); return returnValue; }; } if ( window.postMessage ) { if ( document.addEventListener ) { window.addEventListener( 'message', function( event ) { if ( "http:\/\/jetpack.wordpress.com" !== event.origin ) { return; } jQuery( frame ).height( event.data ); } ); } else if ( document.attachEvent ) { window.attachEvent( 'message', function( event ) { if ( "http:\/\/jetpack.wordpress.com" !== event.origin ) { return; } jQuery( frame ).height( event.data ); } ); } } </script> <script type='text/javascript' src='http://stats.wp.com/e-201736.js' async defer></script> <script type='text/javascript'> _stq = window._stq || []; _stq.push([ 'view', {v:'ext',j:'1:3.6.1',blog:'63145129',post:'1028',tz:'1',srv:'www.proyectosimio.com'} ]); _stq.push([ 'clickTrackerInit', '63145129', '1028' ]); </script> </body> </html>