본문 바로가기
Android

[Android] SharedPreference의 활용

by GGoris 2014. 12. 13.
반응형

[Android] SharedPreference의 활용


출처

안드로이드 데이터베이스 프로그래밍

제이슨 웨이 지음|허윤규 욺김

에이콘 출판사



안드로이드에서는 간단한 저장소로 SharedPreferences를 제공합니다.

SharedPreferences는 단순함과 효율성을 위해 기본 데이터형만 저장 가능합니다.

(boolean, int, float, long, string)



가시성


SharedPreferences는 가시성을 지정하여 접근할 수 있습니다.

MODE_WORLD_READABLE

다른 애플리케이션에서도 접근하여 읽기가 가능하게 합니다.


MODE_WORLD_WRITABLE

다른 애플리케이션에서 접근하여 읽고 쓸수 있드록 합니다.


MODE_MULTI_PROCESS

API 11레벨 이후로 사용가능한 가시성으로

여러 프로세스에서 같은 SharedPreferences를 사용할 수 있도록 해준다.




사용처


SharedPreferences의 사용은 보통 아래와 같다.


앱의 첫 실행 체크

앱의 첫 방문을 확인 할 수 있습니다.


마지막 업데이트 체크

업데이트 했던 시간을 체크해서 업데이트 주기를 지정해 

자동으로 업데이트를 하거나 업데이트를 유도 할 수 있도록 합니다.


사용자 이름저장

로그인 사용자의 이름을 저장 할 수 있습니다.


앱 상태저장

애플리케이션의 상태를 저장 할 수 있습니다.

예를 들어, 앱의 사운드 상태나  언어 상태 등을 저장 할 수 있겠죠.


GPS캐시

마지막으로 동작했던 위치를 저장해두었다가

GPS가 꺼져있거나 동작이 잘 안될때

불러다 사용 할 수도 있습니다.






코드 살펴보기


다음은 사용자 앱 첫 방문 체크의 코드입니다.


public class HasVisited {

private static final String MY_DB="my_db";

private static String HasVisited = "hasVisited";

SharedPreferences sp;

public HasVisited(ContextWrapper cw) {

}

public boolean isHasVisited(ContextWrapper cw){

sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);

boolean hasVisited = sp.getBoolean(HasVisited, false);

        if(!hasVisited){

        Editor e = sp.edit();

        e.putBoolean(HasVisited, true);

        e.commit();

        return false;

        }

        return true;

}

}



다음은 업데이트 체크의 코드입니다.


public class updateCheck {

private static final String MY_DB="my_db";

private static String Up_key = "lastVisitKey";

boolean haveToUpdate = true;

long lastVisitTime;

long timeElapsed;

final long UPDATE_FREQ = 1000*60*60*24; // (1000ms -> 60s -> 60m -> 24h)

SharedPreferences sp;

updateCheck(ContextWrapper cw){

sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);

lastVisitTime = sp.getLong(Up_key, 0L);

}

public boolean check(){


if(timeElapsed > UPDATE_FREQ){

return haveToUpdate;

}

return !haveToUpdate;

}

public void updateCompelete(){

Editor e = sp.edit();

e.putLong(Up_key, System.currentTimeMillis());

e.commit();

}

}



다음은 최근 사용자 이름을 저장하고 불러오는 코드 입니다.


public class CheckUserName {

private String UserName;


private static final String MY_DB="my_db";

private static String UN_key = "UserName";

SharedPreferences sp;

CheckUserName(String UserName, ContextWrapper cw){

this.UserName = UserName;

sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);

}

public String getLastUserName(){

String UserName = sp.getString(UN_key, "");

return UserName;

}

public void setLastUserName(String un){

Editor e = sp.edit();

e.putString(UN_key, un);

e.commit();

}

}




다음은 상태정보를 저장하는 코드입니다.


public class stateCheck {


private static final String MY_DB="my_db";

private static final String isSilentRinger= "isSilentRinger";

SharedPreferences sp;

stateCheck(ContextWrapper cw){

sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);

}

public void setState(boolean bool){

Editor e = sp.edit();

e.putBoolean(isSilentRinger, bool);

e.commit();

}

public boolean isSilentRinger(){

return sp.getBoolean(isSilentRinger, false);

}

}



다음은 최근 치를 캐싱하는 코드입니다.


public class locationCaching {


private static final String MY_DB="my_db";

private static final String lati = "latitudeCache";

private static final String longi = "longitudeCahe";

LocationManager locationManager;

Location lastKnownLocation;

SharedPreferences sp;

locationCaching(ContextWrapper cw) {

locationManager = (LocationManager)cw.getSystemService(Context.LOCATION_SERVICE);

lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

float lat = (float) lastKnownLocation.getLatitude();

float lon = (float)lastKnownLocation.getLongitude();

sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);

Editor e = sp.edit();

e.putFloat(lati, lat);

e.putFloat(longi, lon);

e.commit();

}

}












반응형

댓글