Tutorial básico de Android JSOUP
Última actualización: 24 de octubre de 2013
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.
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
Paso 2 : haga clic derecho en un espacio abierto y seleccione » Ver código fuente de la página «
Paso 3 : Códigos fuente del sitio web
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:
Código fuente
[purchase_link id=”8019″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]