Как правильно запускать операции базы данных SQLite в AsyncTask на основе поведения пользователя в других действиях - PullRequest
0 голосов
/ 31 января 2020

У меня есть отдельный файл класса, который расширяет Asynctask (вместо внутреннего класса), и мне нужно, чтобы он выполнял различные операции с базой данных в зависимости от того, что пользователь делает (щелкает, проводит) в других действиях. Хотя мой код работает должным образом, я не знаю, является ли общепринятым способом запуска правильных операций базы данных использование методов stati c и логических флагов stati c. Есть ли другой подход, который мне не хватает, возможно, шаблон дизайна? Это очень упрощенная версия моего кода для иллюстрации.

FirstActivity. java

public class FirstActivity extends AppCompatActivity {

    private static boolean wasSwiped = false;

    …  // other code

    // to detect swipes
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2,
                           float velocityX, float velocityY) {

    if( // swipe was determined) {
        wasSwiped = true;
        new UpdateDatabaseTask().execute();
    }

    public static boolean getWasSwiped() {
        return wasSwiped;
    }

    public static void setWasSwiped(boolean b) {
        wasSwiped = b;
    }
}

SecondActivity. java

public class SecondActivity extends AppCompatActivity {

    private static boolean wasTapped = false;

    …  // other code

    // to detect taps
    @Override
     public boolean onSingleTapUp(MotionEvent e) {
        wasTapped = true;
        new UpdateDatabaseTask().execute();

    }

    public static boolean getWasTapped() {
        return wasTapped;
    }

    public static void setWasTapped(boolean b) {
        wasTapped = b;
    }
}

UpdateDatabaseTask. java

public class UpdateDatabaseTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Object… objectArray) {

        ...  // code to initialize database

        if(FirstActivity.getWasSwiped() {
            // do something with database
            FirstActivity.setWasSwiped(false);
        }

        if(SecondActivity.getWasTapped() {
            // do something different with database
            SecondActivity.setWasTapped(false);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...