Tutorial - Configura una carga de datos actualizando la interfaz en Android

Duración:
15'
Nivel:
intermedio
Curso relacionado:

El objetivo de éste tutorial es implementar una Actividad que podamos aprovechar al realizar una carga de datos donde el usuario tenga que esperar en nuestras aplicaciones. En el ejemplo no realizaremos una carga real, sólo crearemos una pequeña secuencia donde un TextView muestre una carga de 0% a 100% y una vez completada la “carga” abriremos otra actividad.

Ésta técnica podremos utilizarla a partir del Android 1.5 (CupCake).

En primer lugar crearemos un nuevo proyecto llamado CargaDatos. Debemos de introducir un nombre de paquete válido e indicar la versión mínima de Android que soporta nuestra aplicación.

El asistente nos ayuda a crear la primera Activity que llamaremos CargaActivity que tendrá un layoutactivity_carga.xml asociado. Ésta actividad será la encargada de mostrar un TextView con la cuenta de 0 a 100 de la carga. Todo ésto mediante una clase Asynctask.

En total implementaremos dos Activitys y dos ficheros layout xml. Cuando acabe la carga de CargaActivity abrirá MainActivity.

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

En primer lugar declararemos las actividades en el AndroidManifest.xml

<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>

Abriremos el fichero string.xml localizado dentro de res/values/string.xml y lo modificaremos.

<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 definiremos los ficheros visuales. Podremos ver el logotipo de Imagina Group en el centro de la actividad y un TextView justo debajo de la imagen y un ProgressBar.

Descargaros la imagen y renombradla como logoimaginaformacion.png y guardarla en la carpeta drawable-mdpi.

activity_carga.xml

package com.example.cargadatos;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

La actividad CargaDatos es más compleja por el uso del 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();    }    //    // ASYNKTASCK    //    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();        }    }// fin asynctask}

AsyncTask es una clase que permite ejecutar procesos en background mientras la actividad funciona normalmente. AsyncTask está preparada para actualizar las interfaces de las Activitys. Se compone de una serie de hilos que tienen acceso a los métodos y objetos de la Activity que lo invoca.

Cuando implementamos esta clase, podemos sobrescribir 4 métodos los cuales están comunicados:

onPreExecute --> este código se ejecutará antes de doInBackground. El valor devuelto lo recibirá doInBackground.

doInBackground --> aquí realizaremos el trabajo "pesado" de la carga. Podemos parsear un fichero xml, cargar en memoria los gráficos de un juego, descargar de servidor la información necesaria, etc... El valor devuelto lo recibirá onPostExecute.

onProgressUpdate --> Proceso encargado de actualizar la interfaz de la actividad mientras doInBackGround sigue cargando. El método se ejecutará cada vez que doInBackGround ejecute el método publishProgress(param);.

Una vez esté todo preparado, podemos ejecutarlo y visualizar el incremento del ProgressBar según como se actualiza el TextView.

Solicita información sobre Android 11

En Imagina llevamos más de 11 años ofreciendo formación para empresas, estamos especializados en el área técnica y de ofimática, adaptando nuestras formaciones a vuestras necesidades. Déjanos tus datos, y nos pondremos en contacto contigo para informarte sobre el curso que mejor se ajuste a lo que buscas. Cuéntanos tus necesidades y podremos asesorarte sobre la modalidad que mejor se adapte: En directo, En directo a Medida u Online.

España