Как выполнять операции с базой данных с помощью Async Task - программирование
Подтвердить что ты не робот

Как выполнять операции с базой данных с помощью 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

4b9b3361

Ответ 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 и переопределит абстрактные методы для выполнения всех операций, связанных с базой данных. Спасибо вам