Mon application est bloquée lors de l'exécution d'une opération de base de données après la recherche de solutions, il a été suggéré d'utiliser AsyncTask afin que le thread principal ne soit pas bloqué.
J'ai créé une classe séparée, étendu SQLiteOpenHelper et mis en œuvre les méthodes "OnCreate" et "OnUpgrade". Mais pour implémenter AsyncTask, j'ai besoin d'étendre "AsyncTask". Maintenant, mon problème est que j'ai déjà prolongé une classe et que je ne peux pas étendre une autre classe pour la même classe.
Mon code est quelque chose comme ça.
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();
}
}//
Quelqu'un peut-il suggérer comment je peux effectuer des opérations de base de données avec SQLiteOpenHelper dans une AsyncTask.
Merci Siva
Dans votre Actvity
, ajoutez le code suivant, effectuez les modifications requises,
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();
}
}
}
exécuter ceci par new GetContacts().execute((Object[]) null);
Non, vous ne pouvez pas étendre une classe à partir de plusieurs classes car elle enfreint la propriété de Java, car Java ne supporte pas l'héritage multiple, vous devez donc créer une nouvelle classe qui étendra ASyncTask et surchargera les méthodes les opérations liées à la base de données . Merci