jeudi 29 janvier 2015

Database recursive error

Hello i have one database with contactos. From my mainactivity i call a function called recuperarTodosContactos where i get all the contacts, and put them in a listview.


The problem im facing is that if the database is empty, recuperarContactos fails and the listview is not shown ( crashes). This doent happen if i have the listview with contacts and begin to delete them till there's no contacts and listview is empty.


So i need to enter at least one register... ideally oncreate. But it gives me an error of recursive getWriteble database.



01-29 12:25:53.851: E/AndroidRuntime(583): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.informacion/com.example.informacion.MainActivity}: java.lang.IllegalStateException: getWritableDatabase called recursively


My database ( the important things):



public BaseDatosContactos(Context context) {
super(context, NOMBRE_BASEDATOS, null, VERSION_BASEDATOS);
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREAR_TABLA); //db.execSQL(TABLA_CONTACTOS);
//addContacto(new contactoAgenda("Belen", "c/ Diego Madrazo","1", "belen@gmail.com",true, true, false, false, false,"Familia", R.drawable.hulk));
insertarContacto("Belen", "c/ Diego Madrazo","1", "belen@gmail.com",1, 1, 0, 0, 0,"Familia", R.drawable.hulk);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
// db.execSQL("DROP TABLE IF EXISTS " + TABLA_CONTACTOS);
db.execSQL("DROP TABLE IF EXISTS " + TABLA);
onCreate(db);

}

public void insertarContacto ( String nombre, String direccion, String telefono, String email,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("nombre", nombre);
valores.put("direccion", direccion);
valores.put("telefono", telefono);
valores.put("email", email);
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);
try {
db.insertOrThrow(TABLA, null, valores); //TABLA por "contactos"
} catch (SQLiteConstraintException e) {
Log.d(TAG, "Fallo en la insercion: seguramente la clave ya existe.");
//return false;
}

}
db.close();
}



public ArrayList<contactoAgenda> recuperarTodosContactos() {
SQLiteDatabase db = getReadableDatabase();
ArrayList<contactoAgenda> lista_contactos = new ArrayList<contactoAgenda>();
String[] valores_recuperar = {"nombre","direccion","telefono","email","miembrofacebook","miembrotwitter","miembrogoogle","miembrolinkedin","sexo","tipocontacto","imagen"};
Cursor c = db.query("contactos", valores_recuperar, null, null, null, null, null, null);
if (c==null){
//perhaps something here when database table is empty ??
}
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;
}


Any ideas or help please ?: Listview with image and two texts that crashes when the arraylist obtained from recuperarContactos is empty ( there are not any contacts in the database). This occurs first time..



public contactoAdapter(Context context, ArrayList<contactoAgenda> datos) {
super(context, R.layout.listview_item, datos);
// Guardamos los par�metros en variables de clase.
this.context = context;
this.datos = datos;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View item = convertView;
contactoHolder holder;

if (item == null) {
item = LayoutInflater.from(context).inflate(R.layout.listview_item,
null);

holder = new contactoHolder();
holder.imgContacto = (ImageView) item.findViewById(R.id.imagenContacto);
holder.tvMail = (TextView) item.findViewById(R.id.tvMail);
holder.tvNombre = (TextView) item.findViewById(R.id.tvNombre);

// Almacenamos el holder en el Tag de la vista.
item.setTag(holder);
}

holder = (contactoHolder) item.getTag();

holder.imgContacto.setImageResource(datos.get(position).getDrawableImageID());

holder.tvNombre.setText(datos.get(position).getNombre());
holder.tvMail.setText(datos.get(position).getDireccion());


return item;
}

Aucun commentaire:

Enregistrer un commentaire