Meine Anwendung bleibt beim Ausführen der Datenbankoperation nach dem Durchsuchen von Lösungen hängen. Es wurde vorgeschlagen, dass ich AsyncTask verwende, damit der Hauptthread nicht blockiert wird.So führen Sie Datenbankvorgänge mit Async-Task aus
Ich habe separate Klasse und erweiterte SQLiteOpenHelper erstellt und implementiert "OnCreate" und "OnUpgrade" -Methode. Aber um AsyncTask zu implementieren, muss ich "AsyncTask" erweitern. Jetzt ist mein Problem hier, dass ich bereits eine Klasse erweitert habe und ich kann keine weitere Klasse für die gleiche Klasse erweitern.
Mein Code ist so etwas.
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();
}
}//
Kann jemand empfehlen, wie ich Datenbankoperationen mit SQLiteOpenHelper innerhalb eines AsyncTask durchführen kann.
Dank Siva
Sie könnten eine separate Klasse für AsyncTask erstellen und die execute() -Methode aufrufen, indem Sie ein Objekt für Ihre AsyncTask an einer beliebigen Stelle instanziieren. Soweit ich weiß, wird AsyncTask für Netzwerkoperationen verwendet. Ich denke nicht, dass es für den Zugriff auf SQlite DB erforderlich ist. – SKK
Danke für die Antwort Santosh .. aber meine Anwendung wird getroffen, wenn ich die Daten retrahieren und Logcat hat "Main Thread macht mehr Arbeit ... so etwas in der Art" daher bin ich gezwungen, Async-Klasse zu verwenden ... Du meinst Erstellen Sie eine Async-Klasse seperat und rufen Sie sie in Oncreate der Datenbankklasse auf? – Siva
Nein, OnCreate von SQLiteOpenHelper wird nur einmal aufgerufen, wenn Sie die Anwendung installieren. Ich nehme an, dass Sie die AsyncTask verwenden möchten, um Daten abzurufen. Erstellen Sie einfach eine separate AsyncTask-Klasse in Ihrer Aktivität oder Ihrem Fragment und rufen Sie Funktionen in Ihrer Klasse auf, um SQLiteOpenHelper zu erweitern, um das Ergebnis zu erhalten. Hoffe das war klar. – SKK