Moja aplikacja blokuje się podczas wykonywania operacji bazy danych po wyszukiwaniu w poszukiwaniu rozwiązań, sugerowano użycie AsyncTask, aby główny wątek nie został zablokowany.Jak wykonywać operacje na bazach danych za pomocą zadania Async
Stworzyłem oddzielną klasę i rozszerzoną wersję SQLiteOpenHelper oraz zaimplementowałem metodę "OnCreate" i "OnUpgrade". Ale aby zaimplementować AsyncTask muszę rozszerzyć "AsyncTask". Teraz mój problem polega na tym, że rozszerzyłem już jedną klasę i nie mogę rozszerzyć innej klasy dla tej samej klasy.
Mój kod jest podobny do tego.
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();
}
}//
Czy ktoś może zasugerować, w jaki sposób można wykonać operacje bazy danych za pomocą SQLiteOpenHelper w AsyncTask.
Dzięki Siva
Można utworzyć oddzielną klasę dla AsyncTask i wywołać metodę execute(), tworząc instancję obiektu dla AsyncTask wszędzie tam, gdzie jest to wymagane. O ile mi wiadomo, AsyncTask służy do operacji sieciowych. Nie sądzę, że jest to wymagane do uzyskania dostępu do SQlite DB. – SKK
Dzięki za odpowiedź Santosh .. ale moja aplikacja jest uderzana kiedy odbieram dane i logcat ma "Główny wątek robi więcej pracy ... coś takiego" stąd jestem zmuszony do korzystania z klasy Async ... Masz na myśli utwórz sheratycznie klasę Async i wywołaj ją w klasie Oncreate bazy danych? – Siva
Nie, OnCreate SQLiteOpenHelper zostaje wywołana tylko raz podczas instalacji aplikacji. Przypuszczam, że chcesz użyć AsyncTask do pobierania danych. Po prostu utwórz oddzielną klasę AsyncTask w swojej działalności lub fragment i wywołaj funkcje w klasie rozszerzające SQLiteOpenHelper, aby uzyskać wynik. Mam nadzieję, że to było jasne. – SKK