Я хочу добавить, удалить, обновить и т. Д. Мою базу данных в AsyncTask

#java #android #android-asynctask

#java #Android #android-asynctask

Вопрос:

У меня есть MyDBHandler расширение класса SQLiteOpenHelper .

Я хочу выполнить добавление, вычитание, обновление, удаление и т. Д. В моей базе данных Через asynctask класс, как предложено developer.android.com . Я не понимаю, какие параметры я должен передать методу класса async task doInBackground в my (new DBTasksAsync.execute(?<--here)) , поскольку я буду в дальнейшем реализовывать такие операции, как getWritableDatabase() и getReadableDatabase() в моей Asynctask

 public class MyDBHandler extends SQLiteOpenHelper {
    private static final String TEXT_TYPE = " TEXT";
    private static final String COMMA_SEP = ",";
    private static final String SQL_CREATE_ENTRIES =
        "CREATE TABLE "   MyDatabase.DatabaseEntry.TABLE_NAME   " ("  
                MyDatabase.DatabaseEntry._ID   " INTEGER PRIMARY KEY,"  
                MyDatabase.DatabaseEntry.COLUMN_NAME_TITLE   TEXT_TYPE   COMMA_SEP  
                MyDatabase.DatabaseEntry.COLUMN_NAME_SUBTITLE   TEXT_TYPE   " )";

    private static final String SQL_DELETE_ENTRIES =
        "DROP TABLE IF EXISTS "   MyDatabase.DatabaseEntry.TABLE_NAME;
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "MyDBHandler.db";
    public MyDBHandler(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void doChanges(){
        DBTasksAsync dbTasksAsync=new DBTasksAsync();
        dbTasksAsync.execute();
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_ENTRIES);
    }

    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)    {
        db.execSQL(SQL_DELETE_ENTRIES);
        onCreate(db);
    }
}
  

Комментарии:

1. В чем ваш вопрос?

2. ну, может быть, вместо AsyncTask вас следует использовать AsyncQueryHandler ?

Ответ №1:

Добавление фоновых операций в ваш SQLiteOpenHelper не является обычной практикой. Вы можете сохранить ее синхронной, а компоненты, которые ее используют, будут отвечать за асинхронно. Или вы можете переместить логику с параллелизмом в отдельный класс репозитория.

В целом выполнение операций с базой данных в фоновом режиме мало чем отличается от выполнения любых других краткосрочных фоновых операций. И вы можете найти множество статей по этому поводу: http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html,https://developer.android.com/training/best-background.html , https://developer.android.com/reference/android/content/AsyncTaskLoader.html