Проверка Java каждые 1 час

я создаю сервер, который отправляет вопросы клиентам в зависимости от ячеек, в которых они находятся, например, если они находятся в камере Рима, сервер будет отправлять им вопросы, отличные от вопросов, которые будут отправлены клиентам в ячейке Лондона, и когда вопрос будет отправлен клиенту, сервер сделает его недоступным для ячейки в течение одного часа, я имею в виду, что этот вопрос никогда не будет отправлен ни одному клиенту в этой ячейке в течение одного часа

и мой вопрос: как я могу сделать java-метод, чтобы этот вопрос был доступен через час?

РЕДАКТИРОВАТЬ1:

у меня есть хеш-таблица, ключи - это ячейки, а значения - это вопрос, заданный в этих ячейках

РЕДАКТИРОВАТЬ2

это хеш-таблица

static Hashtable<Integer, List<Integer>> unavialbeQuestions;

и когда я задал вопрос в ячейке, я сделал это

unavialbeQuestions.get(cellID).add(questionID);

и я хочу что-то вроде этого

function makeQuestionAvailable(int questionID, int cellID){}

person William Kinaan    schedule 26.06.2012    source источник
comment
Используете ли вы базу данных для вопросов и клиентов? или что? пожалуйста, поделитесь некоторыми данными сервера.   -  person    schedule 26.06.2012
comment
@djaqeel да, я использую базы данных для сохранения вопросов, ячеек, клиентов и многих других деталей, но скажите мне, какие детали вы хотите, я уверен, что вам не нужна диаграмма базы данных,   -  person William Kinaan    schedule 26.06.2012


Ответы (2)


В java вы можете запланировать запуск методов после того, как пройдет желаемое количество времени, используя класс Timer. Подробности смотрите в этом примере: http://www.ibm.com/developerworks/java/library/j-schedule/index.html

EDIT1:

Вызовите эту функцию через час:

function makeQuestionAvailable(int questionID, int cellID){
     unavialbeQuestions.get(cellID).remove(questionID);
}

EDIT2: Пример кода для планирования:

    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Timer timer = new Timer();

       timer.schedule(new ScheduledTaskWithHandeler(), 5000);

    }

    final Handler handler = new Handler() {

       public void handleMessage(Message msg) {
          Toast.makeText(getApplicationContext(), "Run!",
          Toast.LENGTH_SHORT).show();
       }
    };

    class ScheduledTaskWithHandeler extends TimerTask {

       @Override
       public void run() {
          handler.sendEmptyMessage(0);
       }
    }
person Caner    schedule 26.06.2012
comment
я проверю эту ссылку, спасибо, но, пожалуйста, не могли бы вы увидеть мое редактирование - person William Kinaan; 26.06.2012
comment
после редактирования2: я знаю, как удалить элементы из хеш-таблицы, но как я могу заставить вашу функцию запускаться через 1 час после помещения вопроса в хеш-таблицу? и спасибо за ответ - person William Kinaan; 26.06.2012
comment
см. edit2, это должно быть похоже на это. этот код планирует запуск задачи через 5 секунд. - person Caner; 26.06.2012

Вообще говоря, при использовании Android следует использовать класс AlarmManager, а не timer, особенно если вы делаете это в фоновом режиме, TimerTasks могут быть уничтожены операционной системой.

см. этот пост

person D.T. Atkinson    schedule 26.06.2012