+2500
Empresas han confiado en nosotros
51,5k
Personas que hemos formado
13
años de liderazgo

Cómo hacer una Carga de Datos con Actualización de Interfaz

El objetivo de este tutorial es implementar una Actividad en la cual podamos realizar una carga de datos y mostrar el progreso al usuario mientras espera.

En este ejemplo, no realizaremos una carga de datos real, simplemente crearemos una secuencia que muestre un TextView con un progreso del 0% al 100%. Una vez completada la "carga", se abrirá otra actividad.

Esta técnica se puede utilizar a partir de Android 1.5 (CupCake).

Creación del proyecto y actividades

En primer lugar, crearemos un nuevo proyecto llamado "CargaDatos" con un nombre de paquete válido y especificaremos la versión mínima de Android que soportará nuestra aplicación.

El asistente nos ayudará a crear la primera Actividad llamada "CargaActivity", que tendrá asociado un archivo de diseño llamado "activity_carga.xml". Esta actividad se encargará de mostrar un TextView con el progreso de la carga, utilizando una clase AsyncTask.

En total, implementaremos dos Activities y dos archivos de diseño XML:

  • CargaActivity.java
  • MainActivity.java
  • activity_carga.xml
  • activity_main.xml

Para declarar las actividades en el archivo AndroidManifest.xml, se debe agregar el siguiente código:

<manifest package="com.example.cargadatos" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
    <application android:icon="@drawable/logoimaginaformacion" android:label="@string/app_name" android:theme="@style/AppTheme">
        <activity android:name=".CargaActivity" android:label="@string/title_activity_carga">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity" android:label="@string/title_activity_main" />
    </application>
</manifest>

Actualización de recursos

Abre el archivo string.xml ubicado en res/values/string.xml y modifícalo de la siguiente manera:

<resources>
    <string name="app_name">CargaDatos</string>
    <string name="menu_settings">CargaDatos</string>
    <string name="title_activity_carga">CargaActivity</string>
    <string name="title_activity_main">MainActivity</string>
    <string name="saludo">Bienvenido</string>
</resources>

Ahora vamos a definir los archivos visuales. Podremos ver el logotipo de Imagina Group en el centro de la actividad, seguido de un TextView y una ProgressBar.

Descarga la imagen y renómbrala como logoimaginaformacion.png, luego guárdala en la carpeta drawable-mdpi.

activity_carga.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".CargaActivity">

    <ImageView
        android:layout_width="wrap_content"
        android

:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/logoimaginaformacion" />

    <TextView
        android:id="@+id/loadText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/logo"
        android:layout_centerHorizontal="true"
        android:textSize="20sp"
        android:textColor="@android:color/black" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/loadText"
        android:layout_marginTop="16dp"
        android:max="100"
        android:progress="0" />

</RelativeLayout>

Implementación de las actividades

La actividad CargaActivity es más compleja debido al uso de AsyncTask.

CargaActivity.java

package com.example.cargadatos;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ProgressBar;
import android.widget.TextView;

public class CargaActivity extends Activity {
    TextView loadText;
    ProgressBar progressBar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_carga);

        loadText = (TextView) findViewById(R.id.loadText);
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);

        progressBar.setMax(100);
        progressBar.setBackgroundColor(Color.GRAY);
        progressBar.setProgress(0);

        AsyncTaskCargaDatos ATCargaDatos = new AsyncTaskCargaDatos(this);
        ATCargaDatos.execute();
    }

    // AsyncTask para la carga de datos
    public class AsyncTaskCargaDatos extends AsyncTask<Void, Integer, Void> {
        Context mContext;

        AsyncTaskCargaDatos(Context context) {
            mContext = context;
        }

        @Override
        protected Void doInBackground(Void... params) {
            publishProgress(0);

            for (int i = 0; i < 100; i++) {
                try {
                    Thread.sleep(50);
                    publishProgress(i + 1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... value) {
            loadText.setText(value[0] + " %");
            progressBar.setProgress(value[0]);
        }

        @Override
        protected void onPostExecute(Void result) {
            mContext.startActivity(new Intent(mContext, MainActivity.class));
            finish();
        }
    }
}

La clase AsyncTask permite ejecutar procesos en segundo plano mientras la actividad sigue funcionando normalmente. AsyncTask está diseñada para actualizar las interfaces de las Activities y se compone de una serie de hilos que tienen acceso a los métodos y objetos de la Activity que lo invoca.

Al implementar esta clase, se pueden sobrescribir cuatro métodos que se comunican entre sí:

  • onPreExecute(): Este método se ejecuta antes de doInBackground(). El valor devuelto será recibido por doInBackground().
  • doInBackground(): Aquí se realiza el trabajo "pesado" de la carga. Se puede analizar un archivo XML, cargar gráficos en la memoria para un juego, descargar la información necesaria del servidor, etc. El valor devuelto será recibido por onPostExecute().
  • onProgressUpdate(): Este método se encarga de actualizar la interfaz de la actividad mientras `do

InBackground()sigue cargando. Se ejecuta cada vez quedoInBackground()llama al métodopublishProgress(param)`.

  • onPostExecute(): Se ejecuta al finalizar la tarea en segundo plano. Aquí se puede realizar alguna acción adicional o abrir otra actividad, como en este ejemplo.

Una vez que todo esté preparado, puedes ejecutar la aplicación y observar cómo el ProgressBar se incrementa mientras se actualiza el TextView con el progreso de la carga.

Aprende a programar en Android

En este tutorial, aprendimos cómo configurar una carga de datos con actualización de interfaz en Android utilizando la clase AsyncTask. Esto nos permite realizar tareas en segundo plano de manera eficiente y mantener a los usuarios informados sobre el progreso de la carga.

Si estás interesado en aprender más sobre programación en Android y desarrollar habilidades sólidas en el desarrollo de aplicaciones móviles, te recomiendo nuestro curso de programación en Android. Aprenderás los conceptos fundamentales y las mejores prácticas para crear aplicaciones Android de alta calidad.

¡No dudes en explorar y aprovechar al máximo el curso para llevar tus habilidades de desarrollo de Android al siguiente nivel!

Contáctanos
Contáctanos

Solicita la información que necesites

Facilítanos tus datos y uno de nuestros asesores se pondrá en contacto contigo, para informarte sobre el curso que mejor se adapta a tus necesidades. Todas nuestras formaciones se pueden bonificar hasta el 100%, a través de FUNDAE, sujeto a realizar la formación a través de la empresa y a tener crédito disponible. Tenemos diferentes modalidades de formación; Online o Aula Virtual Personalizada, a medida