2012-03-14 122 views
0

我正在試圖製作一個應用程序,允許用戶每天只訪問一次信息,以向用戶顯示他需要等待多長時間才能再次看到該信息。
這裏是我的代碼:每日申請

long aux_time = prefs.getLong("AUX",System.currentTimeMillis()); 
    Log.v(TAG, "aux=" + aux_time); 
    Log.v(TAG, "time" + System.currentTimeMillis()); 

if(System.currentTimeMillis() > aux_time + (10000 * 60 * 60 * 24)) 
    { 

     finish(); 
     Intent intent = new Intent(Castle.this, Hug.class); 
     startActivity(intent); 
    }   
    if (System.currentTimeMillis() >= aux_time + (10000 * 60 * 60 * 24))  
    { 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putLong("AUX", System.currentTimeMillis()); 
     editor.commit(); 

     finish(); 
     Intent intent = new Intent(Castle.this, Hug_Accepted.class); 
     startActivity(intent); 
    } 

我測試的代碼。而且,我相信它在24小時後會打開,但是當我第一次打開該活動時它不會打開,因爲當我在第二個項目中比較它們時,這兩者之間存在0.00000000001毫秒的差異。有任何想法嗎?

回答

1

除了Jave's answer

  1. 不檢查與當前時間的平等,而不是檢查if (System.currentTimeMillis() > aux_time + (1000 * 60 * 60 * 24))。 在這裏檢查當前時間是否大於aux_time至少24小時 。
  2. 'k'在這裏的作用是什麼?它的價值從未被使用過。
+1

或者他可以在這種情況下使用'日曆'或'時間'對象來避免特殊情況下每天的時間多於/少於24小時(夏令時)的問題。 – Jave 2012-03-14 14:33:17

+0

我正在這樣想。用戶對該受限活動的訪問權限存儲在k中。當k == 1時,用戶可以輸入活動,如果它是0,則不輸入。我正在嘗試做這樣的事情。 K將保持爲0,直到當前時間=輔助時間(即使應用程序關閉),當相等爲真時,在活動開始之前,k = 1也是真實的。 – AnTz 2012-03-14 19:41:36

+0

試過這個。我相信這個代碼對我來說是對的,但我的應用程序總是允許用戶輸入活動,不知道爲什麼。 – AnTz 2012-03-14 19:47:59

0

好吧,你必須在你的應用程序中做的事情是有某種數據庫或本地文件來跟蹤日常使用情況。所以例如,如果你有一個數據庫的列「id」,「lastViewed」(時間在工廠或日期字符串)。

現在每次你運行你的主要活動,在onCreate檢查數據庫,如果lastViewed是昨天或更早,如果不是,則顯示用戶適當的消息,否則讓用戶在數據庫日期和時間標記。

+0

好的,好的。我有想法,但我無法設法編寫有效的代碼。 – AnTz 2012-03-14 14:23:00

0

你的代碼是很奇怪的,首先,你調用一些,如果塊的finish(),但不return;,這意味着你會繼續,你是否millis == aux_time評估未來如果塊(在一個你設置爲k=1這意味着下一個區塊k==1將始終運行)。

其次,你比較毫秒System.currentTimeMillis()==aux_time的時間,除非調用了兩次相同的毫秒將永遠是真實的,但也許我誤解你的代碼?

+0

感謝您的回覆。完成後()我有一個意圖,改變我的活動。至於比較的事情,是的,那是我的問題,我不知道如何解決它。我會嘗試Dheeraj的回答,看看它是否有效。 – AnTz 2012-03-14 19:39:11

0

這是我的工作版本的代碼。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    long aux_time = prefs.getLong("AUX",0); 
    Log.v(TAG, "aux=" + aux_time); 
    Log.v(TAG, "time" + System.currentTimeMillis()); 

    if(aux_time==0) 
    { 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putLong("AUX", System.currentTimeMillis()); 
     Log.v(TAG, "aux2" + aux_time); 
     editor.commit(); 

    //Open restricted activity 
    } 

    if(System.currentTimeMillis() < aux_time + (10000 * 60 * 60 * 24)) 
    { 


     //Open the "Not Allowed" activity 
    }   

    if(System.currentTimeMillis() > aux_time + (10000 * 60 * 60 * 24)) 
    { 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putLong("AUX", System.currentTimeMillis()); 
     Log.v(TAG, "aux2" + aux_time); 
     editor.commit(); 


     //Open the restricted one 
    }