Android DateHelper Sınıfı ve TimeOut İşlemi

Umut Ataş
3 min readApr 25, 2021

Merhaba arkadaşlar, bir önceki yazımda söz verdiğim gibi Android’ de Date (tarih ve saat )nasıl alınır ve bunun kontrolünü yaparak session işlemimizden timeOut nasıl olunur konusunu beraber işliyor olacağız.

Nerdeyse mobil alanda konu ne olursa olsun bir şekilde işimiz tarih ve saat kontrolü yapmaya gelmektedir. Yani tarih ve saat bazında işlem yapıyor olmasak bile bir şekilde kullanıcıya göstermek isteyebiliriz. Kısaca zamanın yazılım alanında ne kadar önemli ve gerekli olduğunu sizlerde farkındasınız. Bu yazımda, tabir yerinde ise bir taşla iki kuş vuruyor olacağız. İlk konumuz tarih-saat aralığının hangi formatta olursa olsun almayı öğreneceğiz, ikinci konumuz ise bir önceki yazıda login olduğumuz session işlemini nasıl unutarak logout olunur konusunu öğreniyor olacağız. Ben hazırım sizlerde hazırsanız başlayalım.

İlk işimiz DateHelper adında bir class oluşturmak. Bunu katmanlı mimari ve cleanKod adı altında bir eğitim yazımda daha anlaşılır şekilde anlatıyor olacağım ancak sizler şuan bilmenizi istediğim konu hem bu class’ a istediğim yerde istediğim şekilde erişebilmek hem de fazla kod yazmaktan kurtulmak ve kodumun okunurluğu açısından bu class’ ı kuruyoruz.

İlk olarak DateHelper sınıfımızda long dönüşlü, Androidin hazır sınıflarından olan SystemClock return’ lu bir metod kuruyoruz.

public static long getCurrentTicks(){
return SystemClock.elapsedRealtime();
}

Daha sonra Calender döndüren “tarih içerisinde belli bir günü bir değişkene atamak için Java bizlere Calendar adında bir sınıf sunar. Bu sınıf sayesinde tarih akışı içinde herhangi bir güne ulaşabiliriz.” bir metod kuruyoruz. Ben burada Global Globals.getLoginDateTime() sınıfımda, get-set metodları kurdum. Bunu yapma nedenim ise her yerden ve her zaman ulaşabilme istediğimdir bu get-set işlemlerim yine aynı şekilde Calendar dönüşlüdür. Aynı şekilde time almak içinde Global sınıfımda Globals.getStoredTimeMilis() long dönüşlü bir get-set metodu kurdum. Son olarak bu metodumda aldığım time verisini return ile döndürdüm ve bu metoda işim bitmiş oldu.

public static Calendar calculateServerTime() {
Calendar loginDateTime = Globals.getLoginDateTime() != null ? Globals.getLoginDateTime() : Calendar.getInstance();
long elapsedTicksFromLogin = getCurrentTicks() - Globals.getStoredTimeMilis();
Calendar returnTime = Calendar.getInstance();
returnTime.setTimeInMillis(loginDateTime.getTimeInMillis() + elapsedTicksFromLogin);
return returnTime;
}

Gelin hem havamız olsun hemde benden hangi şekilde ekrana tarihi yazdırılmasını isteniyor ise onu yazabilmek adına SimpleDateFormat sınıfından yardım alalım. Bir Date değişkenini son kullanıcının anlayabileceği bir formatta yazdırmak için kullanılan SimpleDateFormat, aynı zamanda kullanıcının elle girdiği bir tarihi Date değişkenine çevirebilir.

private static String getCurrentDateStringWithFormat(String format){return new SimpleDateFormat(format).format(calculateServerTime().getTime());}

Ve sonunda DateHelper sınıfımızda son dokunuşlara geldik. getCurrentDateStringWithFormat metodumuzu hangi şekilde kullanıcıya göstermek istiyorsak metodlarımızı kurup istediğimiz yerde istediğimiz zaman ulaşıyor olabileceğiz. Ben iki farklı metod kurdum iki farklı şekilde kullanıcıya gösterme imkanım var sizler ise bunları arttırabilir veya işinize yarayan formatı yazabilirsiniz.

public static String getDateForShortName(){return getCurrentDateStringWithFormat("yyyy/MM/dd");}

public static String getDateFor(){return getCurrentDateStringWithFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");}

Kodumuzun son hali ise aşağıdaki gibi olacak.

public class DateHelper {
public static String getDateForShortName(){return getCurrentDateStringWithFormat("yyyy/MM/dd");}

public static String getDateFor(){return getCurrentDateStringWithFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");}


private static String getCurrentDateStringWithFormat(String format){return new SimpleDateFormat(format).format(calculateServerTime().getTime());}

public static long getCurrentTicks(){
return SystemClock.elapsedRealtime();
}

public static Calendar calculateServerTime() {
Calendar loginDateTime = Globals.getLoginDateTime() != null ? Globals.getLoginDateTime() : Calendar.getInstance();
long elapsedTicksFromLogin = getCurrentTicks() - Globals.getStoredTimeMilis();
Calendar returnTime = Calendar.getInstance();
returnTime.setTimeInMillis(loginDateTime.getTimeInMillis() + elapsedTicksFromLogin);
return returnTime;
}
}

Ve bu sınıfı kullanarak bir önceki dersimizde SessionHelper.TIMED_OUT yardımı ile aldığımız tarih değerimizi şimdi kurduğumuz DateHelper sınıfımızla karşılaştırıp login olmasını veya logout olmasını sağlayacağız. Login olurken aldığım time değerimi time değişkenine atmış oldum “Eğer eksikseniz bir önceki yazıma bakın” daha sonra basit bit if() koşulu ile almış olduğum time değeri şuanki DateHelper.getDateForShortName() eşitse giriş yapmasını değil ise bir Toast uyarısı ile login ekranına atmasını sağlayacak yapıyı kurmuş oldum.

SessionHelper session;
String okuyucKodu, sifre, version, timeOut;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_operations);

session = new SessionHelper(getApplicationContext());
HashMap user = session.getUserDetails();
okuyucKodu = (String) user.get(SessionHelper.KEY_EMAIL);
sifre = (String) user.get(SessionHelper.KEY_SIFRE);
version = (String) user.get(SessionHelper.KEY_VERSION);
timeOut = (String) user.get(SessionHelper.TIMED_OUT);

if(!timeOut.equals(DateHelper.getDateForShortName())) {
ToastHelper.show(this,"Oturum Açma Süreniz Dolmuştur...");
session.logoutUser();
startActivity(new Intent(getApplicationContext(), LoginActivity.class));
finish();
}

Umarım yardımcı olabilmişimdir. Aslında yine çok önemli bir konuya değinmiş oldum sizlerin mutlaka işine yarayacağı kanaatindeyim. Herkese iyi çalışmalar dilerim.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Umut Ataş
Umut Ataş

Written by Umut Ataş

FLUTTER AND ANDROID DEVELOPER

No responses yet

Write a response