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.
- Cómo utilizar la consulta para el argumento de selección múltiple utilizando una columna de selección
- Cómo convertir milisegundos a la fecha en SQLite
- ¿Cómo agregar sub consulta en SQLITE Android junto con 'IN'?
- Almacenar Android SQLite
- Base de datos de diccionarios sin conexión para la aplicación de Android
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
- Guardar ArrayList en la base de datos SQLite en Android
- No se puede realizar la operación porque no hay ninguna transacción actual al insertar en la base de datos
- ¿Cómo puedo hacer un contexto de base de datos SQLite nulo en OnDestroy () en Android?
- Búsqueda de Android con Fragmentos
- Cursor.moveToNext () devuelve false mientras Cursor.getCount () dice que son más de 1 fila
- SQLiteStatement por qué ningún método para la instrucción SELECT - cualquier solución y por qué no hilo seguro
- SQLiteConstraintException: código de error 19: falla de restricción
- Android: sqlite: cursor: getColumnIndex
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