Descargar una página web en Android con OkHttp
Antonio Leiva

En este tutorial vamos a aprender cómo descargar una página web en Android utilizando la librería OkHttp y la librería activity-ktx para facilitar el manejo de los ciclos de vida de nuestra aplicación.

Configuración de la App

Para empezar, necesitamos incluir las siguientes dependencias en nuestro archivo build.gradle:

implementation 'com.squareup.okhttp3:okhttp:4.7.2'
implementation 'androidx.activity:activity-ktx:1.1.0'

También necesitas habilitar el permiso de internet en el manifest:

<uses-permission android:name="android.permission.INTERNET" />

Implementación de la descarga de la web

Luego, en nuestra clase MainActivity, podemos crear una función downloadPage suspendida que utilice el Dispatchers.IO para descargar la página web en un hilo de background:

suspend fun downloadPage(url: String): String {
    return withContext(Dispatchers.IO) {
        val request = Request.Builder()
            .url(url)
            .build()

        val response = OkHttpClient().newCall(request).execute()
        response.body!!.string()
    }
}

Esta función toma como parámetro la URL de la página web que queremos descargar y devuelve el contenido de la página como una cadena. Utilizamos el método execute() del objeto Call de OkHttp para enviar la solicitud y obtener la respuesta, y luego usamos el método string() del objeto ResponseBody para obtener el contenido de la página como una cadena.

Cómo usar la función para descargar la web

Ahora, podemos utilizar la librería activity-ktx para crear un LifecycleScope en nuestro MainActivity y llamar a nuestra función downloadPage dentro de él.

Esto nos permitirá evitar que se intente actualizar la activity si esta es destruida antes de que se complete la petición:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        // Creamos el LifecycleScope y llamamos a downloadPage
        lifecycleScope.launch {
            val pageContent = downloadPage("https://devexperto.com")
            println(pageContent)
        }
    }
}

Ahora, cuando se ejecute nuestra aplicación, se descargará la página web y se imprimirá su contenido en la consola.

Conclusión

En conclusión, hemos aprendido cómo descargar una página web en Android utilizando la librería OkHttp y la librería activity-ktx para facilitar el manejo de los ciclos de vida de nuestra aplicación.

Hemos creado una función suspendida downloadPage que utiliza el Dispatchers.IO para descargar la página en un hilo de background, y luego hemos utilizado un LifecycleScope para asegurarnos de que la descarga se cancele si la actividad es destruida antes de que se complete.

Con estos conocimientos, podemos descargar páginas web de manera sencilla y eficiente en nuestras aplicaciones Android.

Quizá también te interese…

Cómo simular una base de datos reactiva en Room con Fakes

Cómo simular una base de datos reactiva en Room con Fakes

En el desarrollo de aplicaciones móviles es muy común utilizar bases de datos para almacenar y gestionar la información que se utiliza en la aplicación. En el caso de Android, una de las opciones más populares es Room, una librería de persistencia de datos que...

Usar Ktor Client para hacer peticiones HTTP en Android

Usar Ktor Client para hacer peticiones HTTP en Android

Ktor es un framework de servidor y cliente de Kotlin diseñado para crear aplicaciones web y móviles de forma rápida y fácil. En este artículo, veremos cómo usar Ktor client en una aplicación Android para hacer peticiones a una API. Configurar las dependencias de Ktor...

Cómo aprender las bases de Flutter si ya conoces Jetpack Compose

Cómo aprender las bases de Flutter si ya conoces Jetpack Compose

Flutter es un framework de desarrollo de aplicaciones móviles multiplataforma creado por Google. Es popular por su rendimiento y la facilidad con la que se pueden crear aplicaciones atractivas y de alta calidad tanto para Android como para iOS. Si ya tienes...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *