机器人Calendar.MINUTE不会返回正确的分钟

时间:2015-07-23 13:23:44

标签: android android-calendar

所以我有一个循环,我想每5分钟轮询一次数据,以便将我的api请求降到最低。问题是当Android手机上的分钟时,CurrentMin不会更新。它开始正确,但后来无法保持最新​​状态。我是如何每5分钟制作一次民意调查数据的?

while (x==false) {
    currentMin= c.get(Calendar.MINUTE); //get the current min
    System.out.println(currentMin);

    if (currentMin%5==0) {//poll the data every 5 min
        ***Poll data***
    }
}

3 个答案:

答案 0 :(得分:0)

来自How to run a method every X seconds

使用Handler。从来没有,我的意思是从不安排Android中while的任务。您的电池将在几分钟内干燥,您将锁定您的UI并使您的应用程序变慢。

Handler h = new Handler();
int delay = 1000; //interval in milliseconds

h.postDelayed(new Runnable(){
    public void run(){
        //pool data
        h.postDelayed(this, delay);
    }
}, delay);

答案 1 :(得分:0)

您可以尝试使用private class UserAttributesMapper implements AttributesMapper { @Override public Object mapFromAttributes(Attributes attributes) throws NamingException { LdapUser user = new LdapUser(); user.setCn((String)attributes.get("cn").get()); user.setMemberOf((String)attributes.get("memberOf").get()); /*String member = (String)attributes.get("memberOf").get(); int length = attributes.get("memberOf").size(); if(member != null){ for(int i = 0;i<= length; i++){ user.setMemberOf(member); } }*/ //user.setMemberOf(attributes.get("memberOf").getID()); user.setsAMAccountName((String)attributes.get("sAMAccountName").get()); return user; } } 。循环的aproach是一个非常糟糕的选择。

这是一个使用它的例子

http://examples.javacodegeeks.com/android/core/activity/android-timertask-example/

答案 2 :(得分:0)

使用ScheduledThreadPoolExecutor,如下所示:

private ScheduledThreadPoolExecutor mScheduleTaskExecutor = new ScheduledThreadPoolExecutor(1);
mScheduleTaskExecutor.scheduleAtFixedRate(yourRequestRunnable, 0, 5, TimeUnit.SECONDS);

yourRequestRunnable将是:

Runnable yourRequestRunnable = new Runnable() {
    // Do your request here
}

这基本上可以保证您以固定的速率执行代码。如果您在请求完成后需要在UI中执行某些操作,只需在runOnUiThread()上包装处理UI更改的代码