您好我想将数据库作为全局实例,因此我可以通过不同的活动(我有一个用于添加联系人的活动,另一个用于查看联系人,另一个用于删除联系人...)。
所以我的GlobalInstance应该是这样的:
package com.example.informacion;
import android.content.Context;
public class BaseDatosGlobal {
public BaseDatosContactos miAgenda;
private BaseDatosGlobal() {
miAgenda = new BaseDatosContactos(getApplicationContext());
}
private static BaseDatosGlobal instance;
public static BaseDatosGlobal getInstance() {
if (instance == null) instance = new BaseDatosGlobal();
return instance;
}
}
我希望miAgenda
成为从任何活动访问的数据库的名称。问题在于背景。我应该创建miAgenda= new BaseDatosContactos(getApplicationContext());
,但我不能因为eclipse给我一个错误。方法getAplicationContext()
未定义类型BaseDatosGlobal
。
所以我可以在任何地方使用miAgenda.insertarcontacto(....)
或miAgenda.borrarContacto
或其他任何内容。
欢迎任何帮助或想法
我的BaseDatosContatos就像:
public class BaseDatosContactos extends SQLiteOpenHelper {
private static final int VERSION_BASEDATOS = 1;
// Nombre de nuestro archivo de base de datos
private static final String NOMBRE_BASEDATOS = "contactos.db";
// Sentencia SQL para la creación de una tabla
private static final String TABLA_CONTACTOS = "CREATE TABLE contactos" +
"(email TEXT PRIMARY KEY UNIQUE NOT NULL, nombre TEXT, telefono TEXT, direccion TEXT, miembrofacebook INT, miembrotwitter INT, miembrogoogle INT, miembrolinkedin INT, sexo INT, tipocontacto TEXT, imagen INT)";
public BaseDatosContactos(Context context) {
super(context, NOMBRE_BASEDATOS, null, VERSION_BASEDATOS);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(TABLA_CONTACTOS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLA_CONTACTOS);
onCreate(db);
}
public void insertarContacto (String email, String nombre, String telefono, String direccion, int miembrofacebook, int miembrotwitter, int miembrogoogle, int miembrolinkedin, int sexo, String tipocontacto, int imagen){
SQLiteDatabase db = getWritableDatabase();
if (db != null) {
ContentValues valores = new ContentValues();
valores.put("email", email);
valores.put("nombre", nombre);
valores.put("telefono", telefono);
valores.put("direccion", direccion);
valores.put("miembrofacebook", miembrofacebook);
valores.put("miembrotwitter", miembrotwitter);
valores.put("miembrogoogle", miembrogoogle);
valores.put("miembrolinkedin", miembrolinkedin);
valores.put("sexo", sexo);
valores.put("tipocontacto", tipocontacto);
valores.put("imagen", imagen);
db.insert("contactos", null, valores);
}
db.close();
}
//Creo un insertarcontacto propio pasandole un contacto
public void insertarContacto ( contactoAgenda contacto){
SQLiteDatabase db = getWritableDatabase();
if (db != null) {
ContentValues valores = new ContentValues();
valores.put("email", contacto.getMail());
valores.put("nombre", contacto.getNombre());
valores.put("telefono", contacto.getTelefono());
valores.put("direccion", contacto.getDireccion());
valores.put("miembrofacebook", contacto.isMiembroFacebook());
valores.put("miembrotwitter", contacto.isMiembroTwitter());
valores.put("miembrogoogle", contacto.isMiembroGoogle());
valores.put("miembrolinkedin", contacto.isMiembroLinnkedin());
valores.put("sexo", contacto.isSexo());
valores.put("tipocontacto", contacto.getTipoContacto());
valores.put("imagen", contacto.getDrawableImageID());
db.insert("contactos", null, valores);
}
db.close();
}
public void modificarContacto(String email, String nombre, String telefono, String direccion, int miembrofacebook, int miembrotwitter, int miembrogoogle, int miembrolinkedin, int sexo, String tipocontacto, int imagen){
SQLiteDatabase db = getWritableDatabase();
ContentValues valores = new ContentValues();
valores.put("email", email);
valores.put("nombre", nombre);
valores.put("telefono", telefono);
valores.put("direccion", direccion);
valores.put("miembrofacebook", miembrofacebook);
valores.put("miembrotwitter", miembrotwitter);
valores.put("miembrogoogle", miembrogoogle);
valores.put("miembrolinkedin", miembrolinkedin);
valores.put("sexo", sexo);
valores.put("tipocontacto", tipocontacto);
valores.put("imagen", imagen);
db.update("contactos", valores, "email=" + email, null);
//db.update("contactos", valores, "_id=" + id, null);
db.close();
}
public void modificarContacto(contactoAgenda contacto){
SQLiteDatabase db = getWritableDatabase();
ContentValues valores = new ContentValues();
valores.put("email", contacto.getMail());
valores.put("nombre", contacto.getNombre());
valores.put("telefono", contacto.getTelefono());
valores.put("direccion", contacto.getDireccion());
valores.put("miembrofacebook", contacto.isMiembroFacebook());
valores.put("miembrotwitter", contacto.isMiembroTwitter());
valores.put("miembrogoogle", contacto.isMiembroGoogle());
valores.put("miembrolinkedin", contacto.isMiembroLinnkedin());
valores.put("sexo", contacto.isSexo());
valores.put("tipocontacto", contacto.getTipoContacto());
valores.put("imagen", contacto.getDrawableImageID());
db.update("contactos", valores, "email=" + contacto.getMail(), null);
db.close();
}
public void borrarContacto(String email) {
SQLiteDatabase db = getWritableDatabase();
db.delete("contactos", "email=" + email, null);
db.close();
}
public void borrarContacto( contactoAgenda contacto) {
SQLiteDatabase db = getWritableDatabase();
db.delete("contactos", "email=" + contacto.getMail(), null);
db.close();
}
public contactoAgenda recuperarContacto(String email) {
SQLiteDatabase db = getReadableDatabase();
String[] valores_recuperar = {"email", "nombre", "telefono","direccion","miembrofacebook","miembrotwitter","miembrogoogle","miembrolinkedin","sexo","tipocontacto","imagen"};
Cursor c = db.query("contactos", valores_recuperar, "email=" + email, null, null, null, null,null);
if(c != null) {
c.moveToFirst();
}
contactoAgenda contactos = new contactoAgenda(c.getString(0), c.getString(1), c.getString(2), c.getString(3),c.getInt(4), c.getInt(5), c.getInt(6), c.getInt(7),c.getInt(8), c.getString(9), c.getInt(10));
db.close();
c.close();
return contactos;
}
public ArrayList<contactoAgenda> recuperarTodosContactos() {
SQLiteDatabase db = getReadableDatabase();
ArrayList<contactoAgenda> lista_contactos = new ArrayList<contactoAgenda>();
String[] valores_recuperar = {"email", "nombre", "telefono","direccion","miembrofacebook","miembrotwitter","miembrogoogle","miembrolinkedin","sexo","tipocontacto","imagen"};
Cursor c = db.query("contactos", valores_recuperar, null, null, null, null, null, null);
c.moveToFirst();
do {
contactoAgenda contactos = new contactoAgenda(c.getString(0), c.getString(1), c.getString(2), c.getString(3),c.getInt(4), c.getInt(5), c.getInt(6), c.getInt(7),c.getInt(8), c.getString(9), c.getInt(10));
lista_contactos.add(contactos);
} while (c.moveToNext());
db.close();
c.close();
return lista_contactos;
}
}
答案 0 :(得分:1)
您无法直接在 BaseDatosGlobal 类中访问getApplicationContext()
。您可以访问getApplicationContext()
中的Activity
。
并为此在您的constructor
类中生成一个参数BaseDatosGlobal
,并将上下文作为参数传递,如此,
private Context mCon;
private BaseDatosGlobal(Context con) {
this.mCon=con;
}
现在在Activity
中称之为
BaseDatosGlobal BSA=new BaseDatosGlobal(getAppplicationContext());
答案 1 :(得分:0)
您应该将Context传递给BaseDatosContatos构造函数并将其添加为字段:
private BaseDatosGlobal(Context ctx) {
this.context = ctx;
miAgenda = new BaseDatosContactos();
}
还有其他解决方案,这是最简单的方法。当然,由于您的课程没有扩展活动
,因此您无法致电getApplicationContext()