Persistencia de datos en Android
Persistencia de datos en Android
Existen casos como el cambio automático de orientación (al girar el dispositivo) en los que Android destruye la activity y crea una nueva, pero destruyendo también la información que ha sido introducida. Para solucionar esto Android ofrece métodos que almacenan los datos de forma temporal para después restaurarlos en la nueva Activity y así mantener la persistencia de datos.
Con la aparición de los fragments el conflicto fue en aumento, ya que, estos métodos solo son efectivos desde las activities, y, aunque era posible la persistencia, acababa convirtiéndose en un proceso algo complejo. Android optó por una solución efectiva, basada en el identificador de los componentes. Así pues, un componente que disponga de un ID único, automáticamente mantiene la persistencia de datos tanto en los activities como en los fragments.
Aun así es conveniente conocer como trabajan estos métodos que no pertenecen al ciclo de vida de la activity ni del fragment.
A continuación un ejemplo básico de persistencia de datos de un activity mediante estos métodos.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/lay"
tools:context="xip.midominio.com.persistencia.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="nombre"/>
</LinearLayout>
MainActivity.java
package xip.midominio.com.persistencia;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
LinearLayout layout;
EditText usuario;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout = (LinearLayout) findViewById(R.id.lay);
usuario = (EditText) layout.getChildAt(0);
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString("nombre",usuario.getText().toString());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
usuario.setText(savedInstanceState.getString("nombre"));
}
}
Para poder comentar es necesario iniciar sesión