Código fuente de Urimatcher
La clase pública AlarmProvider extiende ContentProvider //
{
Cadena final estática privada DB_NAME = " Alarm.db//Nombre de la base de datos
private static final int DB _ VERSION = 1; //Número de versión, cuando el programa se ejecuta por primera vez, se crea la base de datos, si
//Cambia la base de datos, como agregar una tabla. en este momento. , el valor generalmente se cambiará para que el programa pueda instalarse y ejecutarse nuevamente
La base de datos se puede actualizar manualmente
Cadena final ALARMA _. TABLE _ NAME = "alarm//Un nombre de tabla
Privado static final int ALARM = 1; //El valor entero correspondiente a la tabla, equivalente a id.
UriMatcher estático privado mUriMathcer//Comparador de uri, que establece la relación entre Uri, nombre de tabla e ID, como se muestra a continuación:
estático {
mUriMathcer = new UriMatcher(UriMatcher.NO_MATCH);
mUriMathcer.addURI(AlarmInfo.AUTH,"alarm",alarm);
}
Interfaz privada crear interfaz de tabla //interfaz de creación de tabla
{
Public abstract void createAlarmTable(SQLiteDatabase db);
}
// Clase interna, base de datos Clase auxiliar, implementa la interfaz de creación de tablas.
La clase estática privada DatabaseHelper extiende SQLiteOpenHelper para implementar CreateTableInterface
{
crear interfaz de tabla mCreateTableInterface = this;
Contexto mContext = null
p>
//Constructor, después de llamar a esta función, la base de datos no se
//creada. . Es decir, onCreate a continuación no llama a create db inmediatamente después de ser llamado.
Asistente de base de datos público (contexto de contexto)
{
super(contexto, DB_NAME, null, DB _ VERSION); log.I(etiqueta, "¡Se llamó a DatabaseHelper!");
mContext = contexto
}
@override
public; Void Once Create (SQLite Database DB) // Este método solo se llama una vez cuando se crea la conexión de la base de datos.
{
//Crear tabla de base de datos
mcreatetableinterface .createalarmtable(db);
}
@. Anular
public void al actualizar (base de datos SQLite, versión anterior int, versión nueva int) // Se llama cuando se actualiza la base de datos.
{
//log . I(marca, "¡se llamó a onUpgrade()!");
db exec SQL(" DROP TABLE IF EXISTS. "ALARM_TABLE_NAME);
onCreate(db);
}
@OVERRIDE
public void createAlarmTable(base de datos SQLiteDatabase)
{
//Crear una tabla
db . exec SQL(" CREATE TABLE " ALARM _ TABLE _ NAME "("
Alarmist. _ID "Clave primaria entera",
Alarmist. _LABEL "El texto no está vacío",
Alarmist "El texto no está vacío",
Alarmist. "El texto no está vacío",
Alarmista. _REPEAT "El texto no está vacío",
Alarmista "El texto no está vacío".
"); ");
//Inserta algunos datos en la tabla. . .
db . exec SQL(" INSERTAR EN " ALARMA _ TABLA _ NOMBRE "(" ALARMA info._LABEL ","
ALARMA._TIME ", " ALARMA info._ALERT ", "
AlarmInfo. _REPEAT. _ACTIVE
") valores ('Alarma de Almuerzo', '11:45 AM', 'Tono'. tag.EVERY_DAY "',' false ');");
db .exec SQL("INSERT INTO "ALARM_TABLE_NAME"("ALARM info._LABEL","
ALERT. _TIME ", " ALERT . _REPEAT " , " ALERT . _ALERT " , " AlarmInfo . 45 AM ',' " tag. Tone " ', " " 'lunes, martes, miércoles, jueves, viernes ' "
",' false '); ");
db . exec SQL(" INSERT INTO " ALARM _ TABLE _ NAME "(" ALARM info._LABEL ", "
ALARM._TIME ", " ALARM._ALERT ", " ALARMInfo._REPEAT ", "
alarmist._Activity
") valores('WorkAlert', '09:00 AM', '" tag. Tone"',"
" ' " tag. fin de semana " ', 'false'); ");
db exec(" INSERTAR EN " ALARMA _ TABLA _ NOMBRE "(" Información de ALARMA. ._LABEL ", "
p>Alarmismo _TIME "," Alarmismo _ALERT ", " AlarmInfo ", "
Alarmismo.
_Actividad
") valores('Yoga', '10:15 p.m.', '"etiqueta. Tono "', "," 'Domingo, miércoles', 'Falso');"); > p>
}
}
}
Private DatabaseHelper mDatabaseHelper//Asistente de definición
//Reescribe la siguiente inserción , eliminar, actualizar, consultar y otros métodos.
@Override
público sincronizado int eliminar(Uri Uri, selección de cadena, cadena[] selecciónArgs)
{
SQLiteDatabase db = nulo
éxito booleano = falso;
int count = 0;
prueba {
db = mdatabasehelper.getwritabledatabase(); /p>
db . adquirir referencia();
Éxito = verdadero;
Cambiar(mUriMathcer.match(uri)){
Alerta de caso :
count = db .delete(ALARM_TABLE_NAME, selección, argumentos de selección
Roto
}
}catch(SQLException); e){
e . printstacktrace();
}Finalmente {
if(success == true){
db. referencia de lanzamiento();
}
}
Recuento de devoluciones;
}
@Override p>
Cadena pública getType(Uri uri)
{
Switch(mUriMathcer.match(uri)){
Alarma de caso:
Devolver información de alarma.
Tipo de contenido;
Valor predeterminado:
Lanzar nueva IllegalArgumentException("URI desconocido " uri); >
@Override
Inserción de Uri de sincronización pública (Uri uri, ContentValues initValues)
{
SQLiteDatabase mSQLiteDatabase = null;
Éxito booleano = falso;
Pruebe {
mSQLiteDatabase = mdatabasehelper . getwritabledatabase()
msqlitedatabase
.Éxito = verdadero;
long mRowId
Valor de ContentValues ;
if(initValues == null){
valores = nuevos valores de contenido();
}else{
valores = initValues
}
cambiar (mUriMathcer.match(uri)){
Alerta de caso:
mro wid = msqlitedatabase .
_ID, valores);
if (mro wid gt; 0){
return uri
} en caso contrario {
lanzar nueva SQLException ("No se puede insertar" uri);
}
}
}catch(SQLException e){
e . );
}Finalmente {
if (éxito == verdadero)
msqlitedatabase . p>
Devolver nulo
}
@Override
público booleano onCreate()
{
//log .
}
@Override
Consulta de cursor pública sincronizada (Uri uri, proyección String[], selección de cadena,
String[] SelectionArgs, String sortOrder)
{
SQLiteQueryBuilder mSQLiteQueryBuilder = new SQLiteQueryBuilder();
Cambiar (mUriMathcer.match(uri)){
Alerta de caso:
msqlitequerybuilder.settables(ALARM_TABLE_NAME);
Rompiendo;
}
SQLiteDatabase mSQLiteDatabase = mdatabasehelper . );
msqlitedatabase . adquirir referencia();
cursor mCursor = msqlitequerybuilder . orden);
msqlitedatabase . referencia de versión();
Devolver mCursor
}
@ Anular
Actualización int de sincronización pública (Uri uri, valor ContentValues, selección de cadena,
String[] SelectionArgs)
{
SQLiteDatabase mSQLiteDatabase = null ; p>
int count = 0;
éxito booleano = false
prueba {
mSQLiteDatabase = mdatabasehelper ();
msqlitedatabase.acquire referencia();
Éxito=True;
Cambiar(mUriMat
hcer.match(uri)){
Alerta de caso:
cuenta = actualización de base de datos msqlite (ALARM_TABLE_NAME, valores,
selección, argumentos de selección <); /p>
Romper;
Valor predeterminado:
Romper
}
}catch(SQLException e) {
e . printstacktrace();
}Finalmente {
if (éxito == verdadero)
referencia de lanzamiento de msqlite();
}
Recuento de devoluciones;
}
}
Puedes consultar la alarma de Android, La fuente El código de consulta, actualización y otros métodos básicamente no realiza ningún cambio, solo reemplaza el nombre de la tabla. O agregue un caso.