En esta entrada vamos a ver como usar SQLite para trabajar con bases de datos.

En nuestro proyecto, tendremos que  añadir una nueva clase de Java:

En la siguiente ventana, le ponemos el nombre que le vamos a dar, en mi caso le pondré: BaseDatosSQLite:

Abriremos el contenido del fichero y lo dejaremos como indico más abajo.

BaseDatosSQLite.java


package com.wiidam.miguel.waydamitutorial;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class BaseDatosSQLite extends SQLiteOpenHelper {

public BaseDatosSQLite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table cuentas(aplicacion text, usuario text, clave text)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
} //fin BaseDatosSQLite

El fichero SQLiteDataBase que hemos creado, tiene dos eventos, onCreate que se ejecutará una sola vez para la creación de nuestra base de datos y el evento onUpgrade, si quisiéramos modificar o añadir alguna tabla.

Este fichero tendremos que importarlo en los ficheros .java, en donde queramos utilizar la Base de Datos.

Ahora vamos a ver el contenido del activity_nueva_cuenta.xml y su fichero java correspondiente NuevaCuenta.java.

 

activity_nueva_cuenta.xml


 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_nueva_cuenta"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.wiidam.miguel.waydamitutorial.NuevaCuenta">

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:layout_below="@+id/textView6"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/etAplicacion" />

<TextView
android:text="Usuario:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/etAplicacion"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/textView8" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:layout_below="@+id/textView8"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/etUsuario" />

<TextView
android:text="Clave:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/etUsuario"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/textView9" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:layout_below="@+id/textView9"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/etClave" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal"
android:layout_below="@+id/etClave"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">

<Button
android:text="Guardar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/nc_btGuardar"
android:onClick="guardar"/>

<Button
android:text="LIMPIAR"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/nc_btGuardar"
android:layout_toRightOf="@+id/nc_btGuardar"
android:layout_toEndOf="@+id/nc_btGuardar"
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:id="@+id/nc_btLimpiar"
android:onClick="ncLimpiar"/>

<Button
android:text="VOLVER"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/nc_btLimpiar"
android:layout_toRightOf="@+id/nc_btLimpiar"
android:layout_toEndOf="@+id/nc_btLimpiar"
android:layout_marginLeft="13dp"
android:layout_marginStart="13dp"
android:id="@+id/nc_btVolver"
android:onClick="ncVolver"/>
</LinearLayout>

<TextView
android:text="Aplicación:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView6"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>

 

NuevaCuenta.java


package com.wiidam.miguel.waydamitutorial;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class NuevaCuenta extends AppCompatActivity {
private EditText etAplicacion, etUsuario, etClave;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nueva_cuenta);

//Referenciamos los objetos del layout
etAplicacion= (EditText)findViewById(R.id.etAplicacion);
etUsuario= (EditText)findViewById(R.id.etUsuario);
etClave= (EditText)findViewById(R.id.etClave);
}


public void guardar(View v) {
//Conectamos con la base de datos
BaseDatosSQLite admin = new BaseDatosSQLite(this,"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();

//Recuperamos los campos del formulario
String aplicacion = etAplicacion.getText().toString();
String usuario = etUsuario.getText().toString();
String clave = etClave.getText().toString();

//Comprobamos que se han introducido los datos
if (aplicacion.isEmpty()) {
Toast.makeText(this, "Campo APLICACIÓN vacío", Toast.LENGTH_SHORT).show();
etAplicacion.requestFocus(); //Coge el foco
} else if (usuario.isEmpty()) {
Toast.makeText(this, "Campo USUARIO vacío", Toast.LENGTH_SHORT).show();
etUsuario.requestFocus();
} else if (clave.isEmpty()) {
Toast.makeText(this, "Campo CLAVE vacío", Toast.LENGTH_SHORT).show();
etClave.requestFocus();
} else {

//Primero comprobamos que la aplicación no esté ya dada de alta
String sql = "select * from cuentas where aplicacion='" + aplicacion + "'";
Cursor fila = bd.rawQuery(sql, null);

if (fila.getCount() > 0) { //Para comprobar si la consulta a devuelto algún registro
Toast.makeText(this, "YA ESISTE LA APLICACIÓN", Toast.LENGTH_SHORT).show();
etAplicacion.requestFocus(); //devolvemos el foco al campo aplicación
fila.close();

} else { //Añadimos el registro si no existe
//Creamos un registro para guardar los datos
ContentValues registro = new ContentValues();

//Guardamos en cada campo el valor recogido en los formularios.
//"nombre_campo", variable_campo_layout
registro.put("aplicacion", aplicacion);
registro.put("usuario", usuario);
registro.put("clave", clave);

//Insertamos el registro en la base de datos, en la tabla especificada
bd.insert("cuentas", null, registro);

//Limpiamos los campos del formulario
ncLimpiar(v);

//Mostramos un mensaje de que el registro se ha guardado
Toast.makeText(this, "REGISTRO GUARDADO", Toast.LENGTH_SHORT).show();
} //Fin if


bd.close(); //Cerramos la base de datos

} //Fin else comprobaciones

} //Fin guardar

public void ncLimpiar(View v) {
//Función para limpiar los campos del layout
etAplicacion.setText("");
etUsuario.setText("");
etClave.setText("");
etAplicacion.requestFocus(); //Coge el foco
}

public void ncVolver (View v) {
finish();
}

}

En esta entrada, está el código para llamar a un segundo Activity al pulsar en un botón.

Fichero activity_main.xml: para llamar a la función segundaActividad que he creado en el MainActivity, en el evento onClick del botón hago la llamada de la siguiente forma:

android:onClick="segundaActividad"

Fichero MainActivity.java:


package com.wiidam.miguel.waydamitutorial;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void segundaActividad(View view) {
//Creamos objeto Intent para llamar al segundo activity
Intent i = new Intent(this, SegundaActividad.class);
//Lanzamos el activity
startActivity(i);
}

En la segunda actividad, tan sólo creo un botón para salir de la misma, la función creada en SegundaActividad es: 

public void volver (View v) {
finish();
}

Lo primero que tenemos que realizar es descargarnos la librería: Google Play Services. Para ello seguimos estos pasos:

  • Instalamos la librería desde: Tools->Android->SDK Manager.

  • Seleccionamos el paquete a instalar, marcando su checkbox y pulsamos sobre el botón <OK>.

  • En las siguientes ventanas que vayan apareciendo, vamos aceptando todo hasta completar la instalación.
  • Después habría que añadir la dependencia en el fichero build.gradle, en mi caso lo he agregado de forma manual, como podréis ver más adelante en el fichero buid.gradle, pero si queréis hacerlo usando la interface de android studio, podéis consultar el siguiente manual de Hermosa Programación.

Fichero AndroidManifiest.xml:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wiidam.miguel.waydamitutorial">

<!-- PARA ACTIVAR LOS ANUNCIOS -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- FIN PARA ACTIVAR LOS ANUNCIOS -->

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<!-- PARA ACTIVAR LOS ANUNCIOS -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<!-- FIN PARA ACTIVAR LOS ANUNCIOS -->

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!-- PARA ACTIVAR LOS ANUNCIOS -->
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
<!-- FIN PARA ACTIVAR LOS ANUNCIOS -->

</application>

</manifest>

 

Fichero activity_main.xml:

La cuarta línea no hay que olvidar de introducirla para que nuestros anuncios funcione correctamente:

xmlns:ads="http://schemas.android.com/apk/res-auto"

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.wiidam.miguel.waydamitutorial.MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="WayDami Tutorial"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />


<!-- Layout para el banner de anuncio -->
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad">
</com.google.android.gms.ads.AdView>
<!-- Fin Layout para el banner de anuncio -->

</RelativeLayout>


Fichero MainActivity.java:


package com.wiidam.miguel.waydamitutorial;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

//import para anuncios
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
//fin import para anuncios

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Anuncios
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
//Fin Anuncios
}
}

 

Fichero build.gradle (Module: app):


apply plugin: 'com.android.application'

android {
     compileSdkVersion 25
     buildToolsVersion "25.0.0"
     defaultConfig {
          applicationId "com.wiidam.miguel.waydamitutorial"
          minSdkVersion 15
          targetSdkVersion 25
          versionCode 1
          versionName "1.0"
          testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
          release {
               minifyEnabled false
               proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          }
     }
}

dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
     exclude group: 'com.android.support', module: 'support-annotations'
     }) compile 'com.android.support:appcompat-v7:25.1.0'
     testCompile 'junit:junit:4.12'

     //Código necesario para los anuncios
     compile 'com.google.android.gms:play-services-ads:10.0.1'
     //Código anuncios
}

Fichero strings.xml:

En este fichero, la cadena ca-app-pub-0000000000000000/0000000000 hay que sustituirla por la que habréis obtenido en la página de AdMob.


<resources>
<string name="app_name">Waydami Tutorial</string>

<!-- ANUNCIO -->
<string name="banner_ad">ca-app-pub-0000000000000000/0000000000</string>
</resources>