La biblioteca Volley nos facilita y agiliza el acceso a Internet para procesar:
- Array JSON (JsonArrayRequest) - Objeto JSON (JsonObjectRequest)
Ahora veremos que disponemos de otra clase que nos permite recuperar un archivo en formato String: (StringRequest)
Ingresar una URL de un sitio web y recuperar el archivo HTML de dicha dirección, mostrar su contenido en formato HTML.
Crearemos el proyecto 'Compose26'
Agregamos las dependencias de la biblioteca Volley:dependencies { ... implementation 'com.android.volley:volley:1.2.0' }
Nuestra aplicación debe acceder a internet por lo que debemos pedir dicho permiso:
<uses-permission android:name="android.permission.INTERNET"/>
La interfaz visual a implementar debe ser similar a:
El código a implementar en Kotlin para obtener dicha funcionalidad es:
package com.tutorialesprogramacionya.compose26 import android.content.Context import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.foundation.background import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.ui.Alignment import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.sp import com.android.volley.Request import com.android.volley.toolbox.StringRequest import com.android.volley.toolbox.Volley class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { PantallaPrincipal() } } } @Composable fun PantallaPrincipal() { val contexto = LocalContext.current var url by remember { mutableStateOf("https://www.google.com.ar") } var pagina by remember { mutableStateOf("") } val scroll = rememberScrollState(0) Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { OutlinedTextField( value = url, onValueChange = { url = it }, label = { Text(text = "Url del sitio") }, modifier = Modifier .fillMaxWidth() .padding(5.dp) ) Button(onClick = { RecuperarPagina(contexto, url, { pagina = it }) }) { Text(text = "Recuperar",modifier=Modifier.padding(5.dp)) } Text( text = "$pagina", fontSize = 15.sp, modifier = Modifier .verticalScroll(scroll) .fillMaxWidth() .background(Color(0xFFeeeee4)) .weight(1f) ) } } fun RecuperarPagina(contexto: Context, url: String, datosRecuperados: (String) -> Unit) { val queue = Volley.newRequestQueue(contexto) val requerimiento = StringRequest( Request.Method.GET, url, { response -> datosRecuperados(response.toString()) } ) { error -> } queue.add(requerimiento) }
Cuando se presiona el botón 'Recuperar' llamamos a la función RecuperarPagina y le pasamos la url del sitio que queremos rescatar su HTML:
Button(onClick = { RecuperarPagina(contexto, url, { pagina = it }) }) { Text(text = "Recuperar",modifier=Modifier.padding(5.dp)) }
La función RecuperarPagina crea un objeto de la clase StringRequest, el servidor nos retorna el contenido de la página como texto y procedemos a llamar la la función datosRecuperados para que actualice el estado y se visualicen los datos:
fun RecuperarPagina(contexto: Context, url: String, datosRecuperados: (String) -> Unit) { val queue = Volley.newRequestQueue(contexto) val requerimiento = StringRequest( Request.Method.GET, url, { response -> datosRecuperados(response.toString()) } ) { error -> } queue.add(requerimiento) }
Probar luego ingresando la url siguiente:
https://scratchya.com.ar/videosandroidjava/volley/listararticulos.php
Se debería mostrar en modo texto el archivo Json:
Este proyecto lo puede descargar en un zip desde este enlace: Compose26.zip