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