2016-09-01 6 views
1

Мне нужно проверить пользователя, чтобы выбрать только один элемент в день, используя таймер или диспетчер аварийных сигналов в Android. Есть ли лучший способ его разработки, так что легко проверить, не получает ли пользователь не более одного элемента в день. У меня есть список из десяти элементов, отображаемых в виде списка. Пользователь получает элемент из списка. Он должен получить только один предмет. Если он попытается снова, ему следует предупредить, что один пункт только один раз в день.Проверка только один раз в день для пользователя из списка в Android

общественный класс MainActivity расширяет активность {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Effects.getInstance().init(this); 
    ListView lv = (ListView) findViewById(R.id.listView); 

    List<ItemDetail> itemList = createItems(10); 

    // Load animation 
    final Animation anim = AnimationUtils.loadAnimation(this, R.anim.fade_anim); 

    final ArrayAdapter<ItemDetail> aAdpt = new ArrayAdapter<ItemDetail>(this, android.R.layout.simple_list_item_1, 
      itemList); 
    lv.setAdapter(aAdpt); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> adapterView, final View view, final int position, long id) { 
      MediaPlayer mPlayer = MediaPlayer.create(MainActivity.this, R.raw.gum_bubble_pop); 
      mPlayer.start(); 
      anim.setAnimationListener(new Animation.AnimationListener() { 

       @Override 
       public void onAnimationStart(Animation animation) { 
       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 

       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 

        long now = System.currentTimeMillis(); 
        long lastCheckedMillis = 0; 
        long diffMillis = now - lastCheckedMillis; 
        if(diffMillis >= (3600000 * 24)) { 
         // store now (i.e. in shared prefs) 

         // do the check 
        } else { 
         // too early 
        } 



        if(aAdpt.getCount()==9) { 
         Toast.makeText(MainActivity.this, "You can get only one gift per day "+now, Toast.LENGTH_LONG).show(); 
        } 
        else { 
        ItemDetail item = aAdpt.getItem(position); 
        aAdpt.remove(item); 
        } 
       } 
      }); 
      view.startAnimation(anim); 

     } 
    }); 

} 

private List<ItemDetail> createItems(int size) { 
    List<ItemDetail> result = new ArrayList<ItemDetail>(); 
    for (int i = 0; i < size; i++) { 
     ItemDetail item = new ItemDetail(i, "Gift " + (i + 1)); 
     result.add(item); 
    } 

    return result; 
} 

}

ответ

0

вы пытались это

Calendar c = Calendar.getInstance(); 
int hours = c.get(Calendar.HOUR_OF_DAY); 
int minutes = c.get(Calendar.MINUTE); 
int seconds = c.get(Calendar.SECOND); 

if(hours*3600 + minutes*60 + seconds < 1800){ 
    // Day changed since last task 
} 

В вашем цикле запуска каждые 30 минут, этот код будет проверять, если время между полуночи и полуночи. Поэтому поставьте этот код в свой триггер и внутри if, напишите код, который вы хотите выполнить, если день изменился с момента последнего запуска цикла.