Как запустить каждую операцию SQLite CRUD в потоке и вернуть результат в поток пользовательского интерфейса с помощью ловушки - PullRequest
0 голосов
/ 29 июня 2019

У меня есть этот помощник по базам данных, и мне было поручено выполнять каждую операцию в потоке, потому что выполнение операции базы данных в потоке пользовательского интерфейса является плохой практикой.Затем я должен вернуть результат в поток пользовательского интерфейса с помощью хука.Также желательно блокировать поток при записи в базу данных, потому что, если я правильно помню, вы не можете одновременно записать 2 вещи в базу данных.

Вот фрагмент моего DBHelper:

 public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(Entry.CREATE_TABLE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + Entry.TABLE_NAME);
        onCreate(db);
    }

    public long insertEntry(String type, String debtPerson, String amount, String description, String timestamp, boolean isPaid) {

        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(Entry.COLUM_TYPE, type);
        values.put(Entry.COLUMN_PERSON_IN_DEBT, debtPerson);
        values.put(Entry.COLUMN_AMOUNT, amount);
        values.put(Entry.COLUMN_DESCRIPTION, description);
        values.put(Entry.COLUMN_TIMESTAMP, timestamp);
        values.put(Entry.COLUMN_IS_PAID, isPaid);

        long id = db.insert(Entry.TABLE_NAME, null, values);
        db.close();
        return id;
    }

    public Entry getEntry(long id) {

        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(Entry.TABLE_NAME,
                new String[]{Entry.COLUMN_ID, Entry.COLUM_TYPE, Entry.COLUMN_PERSON_IN_DEBT, Entry.COLUMN_AMOUNT, Entry.COLUMN_DESCRIPTION, Entry.COLUMN_TIMESTAMP, Entry.COLUMN_IS_PAID},
                Entry.COLUMN_ID + "=?",
                new String[]{String.valueOf(id)}, null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        assert cursor != null;
        Entry entry = new Entry(
                cursor.getInt(cursor.getColumnIndex(Entry.COLUMN_ID)),
                cursor.getString(cursor.getColumnIndex(Entry.COLUM_TYPE)),
                cursor.getString(cursor.getColumnIndex(Entry.COLUMN_PERSON_IN_DEBT)),
                cursor.getString(cursor.getColumnIndex(Entry.COLUMN_AMOUNT)),
                cursor.getString(cursor.getColumnIndex(Entry.COLUMN_DESCRIPTION)),
                cursor.getString(cursor.getColumnIndex(Entry.COLUMN_TIMESTAMP)),
                cursor.getString(cursor.getColumnIndex(Entry.COLUMN_IS_PAID)));

        cursor.close();
        return entry;
    }

Я хочу каждую операцию от

public long insertEntry(...) {
    [...]
    return id;
}

до

 public void insertEntry(...){
        Thread thread = new Thread(new Runnable(){
            @Override
            public void run(){
                 [...]
                 [ADD HOOK HERE]
            }
        });
        thread.start();
    }

Как я могу сделать это и добавить хук?Я новичок в темах!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...