Tutorial básico de Android JSOUP

Tutorial básico de Android JSOUP

En este tutorial, aprenderá cómo implementar la biblioteca Java de código abierto JSOUP en su aplicación de Android. JSOUP proporciona una API muy conveniente para extraer y manipular datos, utilizando DOM, CSS y métodos similares a jquery. JSOUP le permite extraer y analizar HTML de una URL, archivo o cadena y mucho más. Crearemos 3 botones en la vista principal y cada botón realizará diferentes tareas, como mostrar el título del sitio web, la descripción y un logotipo. Vamos a empezar…

Antes de continuar con este tutorial, descargue la biblioteca JSOUP más reciente desde aquí .

Pegue su archivo Jsoup descargado en la carpeta libs de su proyecto como se muestra en la imagen a continuación.

jsoup_libs

Cree un nuevo proyecto en Eclipse  File  >  New  >  Android Application Project. Complete los detalles y nombre su proyecto  JsoupTutorial .

Nombre de la aplicación:  JsoupTutorial

Nombre del proyecto:  JsoupTutorial

Nombre del paquete:  com.androidbegin.jsouptutorial

Abra su  MainActivity .java  y pegue el siguiente código.

Actividad principal .java

paquete com.androidbegin.jsouptutorial;

importar java.io.IOException;
importar java.io.InputStream;

importar org.jsoup.Jsoup;
importar org.jsoup.nodes.Document;
importar org.jsoup.select.Elements;

importar android.os.AsyncTask;
importar android.os.Bundle;
importar android.app.Actividad;
importar android.app.ProgressDialog;
importar android.graphics.Bitmap;
importar android.graphics.BitmapFactory;
importar android.view.View;
importar android.view.View.OnClickListener;
importar android.widget.Button;
importar android.widget.ImageView;
importar android.widget.TextView;

clase pública MainActivity extiende Actividad {

	// Dirección URL
	URL de cadena = "https://www.androidbegin.com";
	ProgressDialog mProgressDialog;

	@Anular
	public void onCreate (Paquete guardadoInstanceState) {
		super.onCreate(estadoDeInstanciaGuardado);
		setContentView(R.diseño.actividad_principal);

		// Localiza los botones en activity_main.xml
		Botón titlebutton = (Botón) findViewById(R.id.titlebutton);
		Botón descbutton = (Botón) findViewById(R.id.descbutton);
		Botón logobutton = (Botón) findViewById(R.id.logobutton);

		// Hacer clic en el botón de captura
		titlebutton.setOnClickListener(nuevo OnClickListener() {
			public void onClick (Ver arg0) {
				// Ejecutar Título AsyncTask
				nuevo Título().ejecutar();
			}
		});

		// Hacer clic en el botón de captura
		descbutton.setOnClickListener(nuevo OnClickListener() {
			public void onClick (Ver arg0) {
				// Ejecutar Descripción AsyncTask
				nueva Descripción().ejecutar();
			}
		});

		// Hacer clic en el botón de captura
		logobutton.setOnClickListener(nuevo OnClickListener() {
			public void onClick (Ver arg0) {
				// Ejecutar Logo AsyncTask
				nuevo logotipo().ejecutar();
			}
		});

	}

	// Título AsyncTask
	El título de la clase privada extiende AsyncTask<Void, Void, Void> {
		Título de cadena;

		@Anular
		vacío protegido onPreExecute() {
			super.onPreExecute();
			mProgressDialog = nuevo ProgressDialog(MainActivity.this);
			mProgressDialog.setTitle("Tutorial básico de JSoup para Android");
			mProgressDialog.setMessage("Cargando...");
			mProgressDialog.setIndeterminate(falso);
			mProgressDialog.show();
		}

		@Anular
		Protegido Void doInBackground(Void... params) {
			intentar {
				// Conéctese al sitio web
				Documento documento = Jsoup.connect(url).get();
				// Obtener el título del documento html
				titulo = documento.titulo();
			} captura (IOException e) {
				e.printStackTrace();
			}
			devolver nulo;
		}

		@Anular
		vacío protegido en PostExecute (resultado nulo) {
			// Establecer título en TextView
			TextView txttitle = (TextView) findViewById(R.id.titletxt);
			txttitle.setText(título);
			mProgressDialog.dismiss();
		}
	}

	// Descripción AsyncTask
	clase privada Descripción extiende AsyncTask<Void, Void, Void> {
		Descripción de la cadena;

		@Anular
		vacío protegido onPreExecute() {
			super.onPreExecute();
			mProgressDialog = nuevo ProgressDialog(MainActivity.this);
			mProgressDialog.setTitle("Tutorial básico de JSoup para Android");
			mProgressDialog.setMessage("Cargando...");
			mProgressDialog.setIndeterminate(falso);
			mProgressDialog.show();
		}

		@Anular
		Protegido Void doInBackground(Void... params) {
			intentar {
				// Conéctese al sitio web
				Documento documento = Jsoup.connect(url).get();
				// Uso de elementos para obtener los metadatos
				Descripción de los elementos = documento
						.select("meta[nombre=descripción]");
				// Localiza el atributo de contenido
				desc = descripción.attr("contenido");
			} captura (IOException e) {
				e.printStackTrace();
			}
			devolver nulo;
		}

		@Anular
		vacío protegido en PostExecute (resultado nulo) {
			// Establecer descripción en TextView
			TextView txtdesc = (TextView) findViewById(R.id.desctxt);
			txtdesc.setText(desc);
			mProgressDialog.dismiss();
		}
	}

	// Tarea asíncrona del logotipo
	Logotipo de clase privada extiende AsyncTask<Void, Void, Void> {
		mapa de bits mapa de bits;

		@Anular
		vacío protegido onPreExecute() {
			super.onPreExecute();
			mProgressDialog = nuevo ProgressDialog(MainActivity.this);
			mProgressDialog.setTitle("Tutorial básico de JSoup para Android");
			mProgressDialog.setMessage("Cargando...");
			mProgressDialog.setIndeterminate(falso);
			mProgressDialog.show();
		}

		@Anular
		Protegido Void doInBackground(Void... params) {

			intentar {
				// Conéctese al sitio web
				Documento documento = Jsoup.connect(url).get();
				// Usando elementos para obtener los datos de la clase
				Elementos img = document.select("a[class=brand brand-image] img[src]");
				// Localiza el atributo src
				Cadena imgSrc = img.attr("src");
				// Descargar imagen desde URL
				InputStream input = new java.net.URL(imgSrc).openStream();
				// Decodificar mapa de bits
				mapa de bits = BitmapFactory.decodeStream(entrada);

			} captura (IOException e) {
				e.printStackTrace();
			}
			devolver nulo;
		}

		@Anular
		vacío protegido en PostExecute (resultado nulo) {
			// Establecer la imagen descargada en ImageView
			ImageView logoimg = (ImageView) findViewById(R.id.logo);
			logoimg.setImageBitmap(mapa de bits);
			mProgressDialog.dismiss();
		}
	}
}

En esta actividad, hemos creado tres botones que responden a tres AsyncTask diferentes. Antes de continuar con una explicación más detallada, consulte los pasos a continuación sobre cómo obtener los códigos fuente html de un sitio web.

Paso 1 : Visite https://www.androidbegin.com  con cualquier navegador de Internet preferido en su PC

página principal

 

Paso 2 : haga clic derecho en un espacio abierto y seleccione » Ver código fuente de la página «

fuente de la página

 

Paso 3 : Códigos fuente del sitio web

fuente

 

El código fuente de un sitio web determina cómo deben aparecer sus páginas web. Sin embargo, el código fuente de una página web solo mostrará información y código que no es procesado por el servidor.

El primer botón recupera el título del sitio web. Esta es una forma de obtener el título de la página.

Código Java

@Anular
		Protegido Void doInBackground(Void... params) {
			intentar {
				// Conéctese al sitio web
				Documento documento = Jsoup.connect(url).get();
				// Obtener el título del documento html
				titulo = documento.titulo();
			} captura (IOException e) {
				e.printStackTrace();
			}
			devolver nulo;
		}

Código fuente del sitio web

<cabeza>
<juego de caracteres meta="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Android Java Tutoriales, ejemplos, desarrollo" /><link rel="profile" href="http://gmpg.org/xfn/11" />
<enlace rel="pingback" href="https://www.androidbegin.com/xmlrpc.php" />

<!--[si es IE 9]>
<script src="https://www.androidbegin.com/wp-content/themes/bliss/assets/js/html5.js" type="text/javascript"></script>
<![finalizar]-->

<script tipo="texto/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-35207555-1']);
  _gaq.push(['_trackPageview']);

  (función() {
    var ga = documento.createElement('script'); ga.tipo = 'texto/javascript'; ga.async = verdadero;
    ga.src = ('https:' == documento.ubicación.protocolo ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = documento.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
<!-- Este sitio está optimizado con el complemento Yoast WordPress SEO v1.5.4.2 - https://yoast.com/wordpress/plugins/seo/ -->
<title>Tutoriales, ejemplos, guías y desarrollo de Android Java - AndroidBegin</title>
<meta name="description" content="Tutoriales, ejemplos, guías y desarrollo de Android Java para principiantes. Aprenda a programar Android con el código fuente completo disponible para descargar."/>
<meta name="keywords" content="Tutoriales de Android, Ejemplos de Android, Guías de Android, Consejos de Android, Aplicaciones de Android, Juegos de Android"/>

 

El segundo botón recupera la descripción del sitio web. Al usar Elementos, podemos especificar la ubicación exacta de los datos.

Código Java

@Anular
		Protegido Void doInBackground(Void... params) {
			intentar {
				// Conéctese al sitio web
				Documento documento = Jsoup.connect(url).get();
				// Uso de elementos para obtener los metadatos
				Descripción de los elementos = document.select("meta[nombre=descripción]");
				// Localiza el atributo de contenido
				desc = descripción.attr("contenido");
			} captura (IOException e) {
				e.printStackTrace();
			}
			devolver nulo;
		}

Código fuente del sitio web 

<title>Tutoriales, ejemplos, guías y desarrollo de Android Java - AndroidBegin</title>
<meta name="description" content="Tutoriales, ejemplos, guías y desarrollo de Android Java para principiantes. Aprenda a programar Android con el código fuente completo disponible para descargar."/>
<meta name="keywords" content="Tutoriales de Android, Ejemplos de Android, Guías de Android, Consejos de Android, Aplicaciones de Android, Juegos de Android"/>

 

El tercer botón recupera el logo del sitio web. Al usar Elementos, podemos especificar la ubicación exacta de los datos.

Código Java

@Anular
		Protegido Void doInBackground(Void... params) {

			intentar {
				// Conéctese al sitio web
				Documento documento = Jsoup.connect(url).get();
				// Usando elementos para obtener los datos de la clase
				Elementos img = document.select("a[class=brand brand-image] img[src]");
				// Localiza el atributo src
				Cadena imgSrc = img.attr("src");
				// Descargar imagen desde URL
				InputStream input = new java.net.URL(imgSrc).openStream();
				// Decodificar mapa de bits
				mapa de bits = BitmapFactory.decodeStream(entrada);

			} captura (IOException e) {
				e.printStackTrace();
			}
			devolver nulo;
		}

Código fuente  del sitio web

<div class="row-fluid top-banner">
			<div class="contenedor">
				<div class="banner-overlay"></div>
									<a class="marca imagen de marca" href="https://www.androidbegin.com/" title="AndroidBegin" rel="inicio"><img src="https://www.androidbegin.com/%20wp-content/uploads/2013/08/Web-Logo364.png" alt="AndroidBegin"><h1></h1></a>
								<div class="top-banner-social pull-right" style="top:15px;"> </div>
			</div>
		</div>

 

A continuación, cree un diseño gráfico XML para MainActivity. Vaya a  res  >  diseño  > Haga clic con el botón derecho en el  diseño  >  Nuevo  >  Archivo XML de Android

Nombre su nuevo archivo XML  activity_main.xml  y pegue el siguiente código.

actividad_principal.xml

<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    xmlns_herramientas="http://esquemas.android.com/herramientas"
    android_layout_width="match_parent"
    android_layout_height="match_parent" >

    <Vista de texto
        android_id="@+id/títulotxt"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_gravedad="centro" />

    <Botón
        android_id="@+id/botón de título"
        android_layout_width="fill_parent"
        android_layout_height="wrap_content"
        android_layout_below="@+id/titletxt"
        android_text="@cadena/Título" />

    <Vista de texto
        android_id="@+id/desctxt"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/botón de título"
        android_layout_centerInParent="verdadero"
        android_gravedad="centro" />

    <Botón
        android_id="@+id/descbutton"
        android_layout_width="fill_parent"
        android_layout_height="wrap_content"
        android_layout_below="@+id/desctxt"
        android_text="@cadena/Descripción" />

    <ImagenVista
        android_id="@+id/logotipo"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/descbutton"
        android_layout_centerInParent="verdadero" />

    <Botón
        android_id="@+id/logobutton"
        android_layout_width="fill_parent"
        android_layout_height="wrap_content"
        android_layout_below="@+id/logotipo"
        android_text="@cadena/Logotipo" />

</RelativeLayout>

A continuación, cambie el nombre y los textos de la aplicación. Abra su  strings.xml  en su carpeta  res > valores  y pegue el siguiente código.

cadenas.xml

<?versión xml="1.0" codificación="utf-8"?>
<recursos>

    <string name="app_name">Tutorial básico de Jsoup</string>
    <string name="action_settings">Configuración</string>
    <string name="hello_world">¡Hola mundo!</string>
    <string name="Title">Título del sitio web</string>
    <string name="Description">Descripción del sitio web</string>
    <string name="Logo">Logotipo del sitio web</string>

</recursos>

En su  AndroidManifest.xml , debemos declarar permisos para permitir que la aplicación se conecte a Internet. Abra su  AndroidManifest.xml  y pegue el siguiente código.

Manifiesto de Android. xml

<?versión xml="1.0" codificación="utf-8"?>
<manifiesto xmlns_android="http://schemas.android.com/apk/res/android"
    paquete="com.androidbegin.jsouptutorial"
    android_versionCode="1"
    android_versionName="1.0" >

    <usos-sdk
        android_minSdkVersion="8"
        android_targetSdkVersion="17" />

    <usos-permiso android_name="android.permiso.INTERNET" />

    <aplicación
        Android: permitir copia de seguridad = "verdadero"
        android_icono="@dibujable/ic_launcher"
        android_etiqueta="@cadena/nombre_aplicación"
        android_tema="@estilo/AppTheme" >
        <actividad
            android_nombre=".Actividad principal"
            android_etiqueta="@cadena/nombre_aplicación" >
            <intent-filter>
                <acción android_name="android.intent.action.MAIN" />

                <categoría android_name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </actividad>
    </aplicación>

</manifiesto>

Producción:

Capturas de pantalla del tutorial básico de Jsoup

Código fuente

[purchase_link id=”8019″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]