2015-01-22 11 views
-1

안녕하세요 저는 글로벌 인스턴스로 데이터베이스를 만들고 싶습니다. 그래서 다른 활동에서 연락을 취할 수 있습니다. 연락처 추가를위한 하나의 활동과 연락처를 볼 수있는 다른 활동 및 연락처 삭제를위한 활동이 있습니다. 나는 모든 활동에서 액세스 할 수있는 데이터베이스의 이름으로 miAgenda 원하는데이터베이스 컨텍스트 오류

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; 
     } 
} 

: 같은

그래서 내 GlobalInstance이 있어야한다. 문제는 문맥이다. miAgenda= new BaseDatosContactos(getApplicationContext());을 작성해야하지만 Eclipse가 오류를 발생시키기 때문에 위선적입니다. 방법 getAplicationContext()BaseDatosGlobal 유형에 대해 정의되지 않았습니다.

그래서 miAgenda.insertarcontacto(....) 또는 miAgenda.borrarContacto 또는 어떤 장소에서든 사용할 수 있습니다.

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

당신은 BaseDatosContatos 생성자에 컨텍스트를 전달하고 필드로 추가해야합니다 :

private BaseDatosGlobal(Context ctx) { 
    this.context = ctx; 
    miAgenda = new BaseDatosContactos(); 
    } 

이 있습니다

어떤 도움이나 아이디어

내 BaseDatosContatos 같은입니다 환영합니다 다른 솔루션, 이것이 가장 쉽습니다. 클래스가 BaseDatosGlobal 클래스에서 직접 활동을

+0

야해처럼 Activity이라고합니다. getInstance(). miAgenda.insertarContacto (contactoActual); 예를 들어 어떤 활동에서 ?? 감사합니다 –

+0

네,하지만 실제로 어쨌든 컨텍스트를 전달해야합니다 ... 또 다른 예가 될 수 있습니다 : BaseDatosGlobal.getInstance (context) .miAgenda.insertarContacto (contactoActual); – Shine

1

당신 캔트 액세스 getApplicationContext()을 확장되지 않기 때문에 당연히 당신은 getApplicationContext()를 호출 할 수 없습니다. getApplicationContext()Activity에 액세스 할 수 있습니다.

private Context mCon; 

    private BaseDatosGlobal(Context con) { 
    this.mCon=con; 
    } 

하고 당신의 BaseDatosGlobal 클래스에서 하나 개의 인수 constructor을하고 그래서 같은 인수로 상황을 통과하기위한

은, 지금은 BaseDatosGlobal 전화

BaseDatosGlobal BSA=new BaseDatosGlobal(getAppplicationContext()); 
+0

BaseDatosGlobal.getInstance()를 호출하면 안됩니다. miAgenda.insertarContacto (contactoActual); 예를 들어 어떤 활동에서 ?? –

+0

@ EduardoGutiérrez하지만'database'에 접근하기 위해서는'Open'과'Close'를위한'BaseDatosContactos' 클래스에 context가 필요합니다. DB –

+0

@MD 네,하지만 일단 당신의 솔루션을 넣으면 ... miAgenda에 접근하는 방법은 스타일 BaseDatosGlobal.getInstance(). miAgenda.insertarContacto (contactoActual); ?? BaseDatosGlobal을 가리킬 때 BSA = new BaseDatosGlobal (getAppplicationContext()); 그럼 모든 액티비티에 새로운 BaseDatosGlobal을 만들 필요가 있습니다 .... 내가 올바른 방법을 이해한다면 .... –