Cómo realizar operaciones de base de datos mediante Async Task
Mi aplicación se está atascando mientras que realiza la operación de la base de datos después de googling para las soluciones que se sugirió que utilizo AsyncTask de modo que el hilo principal no consiga bloqueado.
He creado la clase separada y extendida SQLiteOpenHelper e implementado "OnCreate" y "OnUpgrade" método. Pero para implementar AsyncTask necesito extender "AsyncTask". Ahora mi problema aquí es que ya he extendido una clase y no puedo extender otra clase para la misma clase.
- Acceso a bases de datos en Android
- Db-shm y db-wal en bases de datos sqlite
- Actualizar la base de datos SQLite de una versión a otra?
- Cómo eliminar todos los elementos de SQLite en Android
- Eliminar el número especificado de filas de la base de datos SQLite
Mi código es algo como esto.
import android.content.Context; import android.database.Cursor; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import android.widget.Toast; import com.example.project.R; public class Database extends SQLiteOpenHelper{ static final String dbname="Project"; static final int dbversion=1; TableA r=new TableA(); SQLiteDatabase db; private Context Context; public Database(Context context) { super(context, dbname, null, dbversion); try{ db=getWritableDatabase(); // TODO Auto-generated constructor stub if (db.isOpen()){ System.out.println("Database is opened"); } else{ System.out.println("Database is not opened"); } } catch(Exception e){ Log.e(dbname, e.getMessage()); } } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub try{ db.beginTransaction(); db.execSQL(r.r_Table); db.insert(r.Tablename, null, r.insertdata()); db.setTransactionSuccessful(); retrivedata(); } catch(Exception e){ android.util.Log.e(r.Tablename, e.getMessage()); } finally{ db.endTransaction(); } }//
¿Puede alguien sugerir cómo puedo realizar operaciones de base de datos con SQLiteOpenHelper dentro de un AsyncTask.
Gracias Siva
- Operador '! =' No se puede aplicar a los operandos de tipo 'Tarea' e 'int'
- Android Studio vs idioma ruso
- ¿Hay alguna forma de implementar la búsqueda de texto completo (FTS) en SQlite de la plataforma Android?
- ¿Hay buenos ORMs (preferiblemente implementaciones JPA) que soportan SQLite (en Android)?
- SQLiteAssetHelper - problemas en teléfonos específicos, por ejemplo OnePlus
- ¿Cuándo es recomendable abrir y cerrar una base de datos?
- Xml vs. sqlite para android y cómo
- ¿Por qué un delete rawQuery necesita un moveToFirst para eliminar realmente las filas?
En tu Actvity
agrega el siguiente código, realiza los cambios necesarios,
private class GetContacts extends AsyncTask<Object, Object, Cursor> { DatabaseConnector dbConnector = new DatabaseConnector( getApplicationContext()); @Override protected Cursor doInBackground(Object... params) { dbConnector.open(); if (dbConnector.getAllValues() != null) { return dbConnector.getAllValues(); } else return null; } @Override protected void onPostExecute(Cursor result) { if (result != null) { conAdapter.changeCursor(result); // set the adapter's Cursor dbConnector.close(); } } }
ejecute esto por el new GetContacts().execute((Object[]) null);
No, no puedes extender una clase de varias clases ya que viola la propiedad de java porque java no soporta herencia múltiple así que para tu caso tienes que crear una nueva clase que extenderá ASyncTask y reemplazará los métodos abstractos para ejecutar todo las operaciones relacionadas con la base de datos. Gracias
- Cómo cambiar la posición de un spinner según la posición de otro spinner en dos actividades diferentes
- Caché de dibujo de Android