Как выполнять операции с базой данных с помощью Async Task
Мое приложение застревает во время работы с базой данных после поиска в Google решениях, было предложено использовать AsyncTask, чтобы основной поток не блокировался.
Я создал отдельный класс и расширенный SQLiteOpenHelper и реализовал метод "OnCreate" и "OnUpgrade". Но для реализации AsyncTask мне нужно расширить "AsyncTask". Теперь моя проблема заключается в том, что я уже расширил один класс, и я не могу продлить еще один класс для того же класса.
Мой код выглядит примерно так.
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();
}
}//
Кто-нибудь может предложить, как я могу выполнять операции с базами данных с помощью SQLiteOpenHelper в AsyncTask.
Спасибо
Siva
Ответы
Ответ 1
В вашем Actvity
добавьте следующий код, внесите необходимые изменения,
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 Cursor
dbConnector.close();
}
}
}
выполните это с помощью new GetContacts().execute((Object[]) null);
Ответ 2
Нет, вы не можете расширять класс из нескольких классов, поскольку он нарушает свойство java, потому что java не поддерживает множественную наследование, поэтому для вашего случая вам нужно создать новый класс, который расширит ASyncTask и переопределит абстрактные методы для выполнения всех операций, связанных с базой данных.
Спасибо вам