数据库上下文出错

时间:2015-01-22 13:20:22

标签: android sqlite global-variables android-context

您好我想将数据库作为全局实例,因此我可以通过不同的活动(我有一个用于添加联系人的活动,另一个用于查看联系人,另一个用于删除联系人...)。

所以我的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;
        }

    }

2 个答案:

答案 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()