android에서 사용하는 여러 저장 방법 중 간단하게 사용할 수 있는 기능 입니다.

개발에 필요한 크지 않은 변수와 값들을 내부에 저장하기에 적당합니다.

key-value 형식으로 저장이 됩니다.

 


1. SharedPreferences

 

SharedPreferences에서 사용하는 상수와  Method들 입니다.

그냥 이런게 있구나 하고 보시고 필요시 사용하면 됩니다.

 

1.1 Constants


SharedPreference Constants


Type

Constant

Description

int

MODE_APPEND

기존 preferences 신규 preferences 추가

int

MODE_MULTI_PROCESS

이미 호출되어 사용 중인지 체크

int

MODE_PRIVATE

생성한 application에서만 사용 가능

int

MODE_WORLD_READABLE

다른 application에서 읽을 있음

int

MODE_WORLD_WRITEABLE

다른 application에서 기록할 있음

 


1.2 Methods


SharedPreference Methods

 

Type

Method

abstract boolean

contains(String key)

- 키 값이 들어있는지 체크

abstract SharedPreferences.Editor

edit()

- 신규 Editor를 생성

abstract Map

getAll()

- 저장된 모든 값을 검색

abstract boolean

getBoolean(String key, boolean defValue)

- 키에 해당하는 boolean 값 검색

abstract float

getFloat(String key, float defValue)

- 키에 해당하는 float 값 검색

abstract int

getInt(String key, int defValue)

- 키에 해당하는 int 값 검색

abstract long

getLong(String key, long defValue)

- 키에 해당하는 long 값 검색

abstract String

getString(String key, String defValue)

- 키에 해당하는 set 형태의 string 값 검색

abstract Set

getStringSet(String key, Set defValues)

- 키에 해당하는 boolean 값 검색


1.3 Editor Methods


SharedPreference.Editor Methods

 

Type

Method

abstract void

apply()

- 비동기 적으로 값을 저장 한다

abstract SharedPreferences.Editor

clear()

- 모든 값을 삭제 한다.

abstract boolean

commit()

- 동기 적으로 값을 저장 하고 결과를 리턴 한다

abstract SharedPreferences.Editor

putBoolean(String key, boolean value)

- bool 값을 설정 한다

abstract SharedPreferences.Editor

putFloat(String key, float value)

- float 값을 설정 한다

abstract SharedPreferences.Editor

putInt(String key, int value)

- int 값을 설정 한다

abstract SharedPreferences.Editor

putLong(String key, long value)

- long 값을 설정 한다

abstract SharedPreferences.Editor

putString(String key, String value)

- string 값을 설정 한다

abstract SharedPreferences.Editor

putStringSet(String key, Set values)

- set  값을 설정 한다

abstract SharedPreferences.Editor

remove(String key)

- key 해당하는 값을 삭제 한다

 

* putxxx() 작업은 반영을 위해 commit() 또는 apply()를 호출해야 합니다.

* remove()는 반영을 위해 commit()을 호출 해야 합니다.



2. 프로그램 설명

 

간단히 사용하는 저장 공간이기 때문에 설치하는 것도 없고

핸들만 얻어서 사용하면 됩니다.

 

2.1 Handle 얻기


getSharedPreferences() : 여러개의 Shared Preference 파일들을 사용 하는 경우

getPreferences() : 한개의 Shared Preference 파일을 사용하는 경우.

 

여기서는 첫번째 getSharedPreferences()를 사용 합니다.

정의는

public abstract SharedPreferences getSharedPreferences (String name, int mode)

이렇게 되어 있고


사용은

SharedPreferences sharePref = getSharedPreferences("SHARE_PREF", MODE_PRIVATE);

이렇게 합니다.


SHARE_PREF라는 이름의 저장소를 생성한 application에서만

사용가능 모드로 사용하기 위해 생성합니다.

만일 SHARE_PREF 라는파일이 없으면 신규로 생성 합니다.


 버튼을 클릭하면 작업을 하고 바로 리스트를 가져오도록 되어있습니다.

 

2.2 Data 저장


Editor를 이용하여 저장 합니다.

SharedPreferences.Editor editor = sharePref.edit();

각각의 데이터 타입별로 저장해 보았습니다.

public void saveData() {
    editor.putBoolean("isShare", true);
    editor.putFloat("fRate", 1.33f);
    editor.putInt("nValue", 100);
    editor.putString("name", "copycoding");
    editor.apply();

}

2.3 Data 수정


저장과 같은 방식으로 값만 변경하면 됩니다.

public void updateData() {
    editor.putBoolean("isShare", false);
    editor.putFloat("fRate", 3.33f);
    editor.putInt("nValue", 5000);
    editor.putString("name", "copycoding.tistory");
    editor.apply();
}

2.4 Data 삭제


remove()key값을 적어주면 됩니다.

public void deleteData() {
    editor.remove("nValue");
    editor.commit();
}

2.5 불러오기


최초 생성한 핸들(여기서는 sharePref)을 이용해서 불러옵니다.

public void listData() {
    String dataList = "";
    Map totalValue = sharePref.getAll();
    for(Map.Entry entry : totalValue.entrySet()) {
        dataList += entry.getKey().toString()+ ": " + entry.getValue().toString() + "\r\n";
        Log.d("share : ", entry.getKey() + ": " + entry.getValue());
    }
    tvList.setText(dataList);
}


저는 자동으로 출력하려고 만든거고 하나씩 가져오려면

sharePref.getString(“name”, “”);

이렇게 하면 됩니다.

뒤에 “”이건 default 값을 적어주는 것입니다.

 

 

3. Source Code

 

3.1 activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_onclick1"
        android:text="Save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:onClick="btnClick"/`
    <Button
        android:id="@+id/btn_onclick2"
        android:text="Update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:onClick="btnClick"/>
    <Button
        android:id="@+id/btn_onclick3"
        android:text="Delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="190dp"
        android:layout_marginTop="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:onClick="btnClick"/>
    <Button
        android:id="@+id/btn_onclick4"
        android:text="Clear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="280dp"
        android:layout_marginTop="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:onClick="btnClick"/>

    <TextView
        android:id="@+id/tvList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SharedPreferences Test"
        android:layout_marginTop="100dp"
        android:textSize="25dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>


3.2 MainActivity.java


package copycoding.android.app.sharedprefer;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import java.util.Map;

public class MainActivity extends AppCompatActivity {

    static private String SHARE_NAME = "SHARE_PREF";
    static SharedPreferences sharePref = null;
    static SharedPreferences.Editor editor = null;
    TextView tvList;

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

        tvList = (TextView)findViewById(R.id.tvList);

        sharePref = getSharedPreferences(SHARE_NAME, MODE_PRIVATE);
        editor = sharePref.edit();
    }

    public void btnClick(View view) {
        if(view.getId() == R.id.btn_onclick1) {  // Buttoon의 ID를 찾아서 실행이 된다.
            saveData();
        } else if(view.getId() == R.id.btn_onclick2) {
            updateData();
        } else if(view.getId() == R.id.btn_onclick3) {
            deleteData();
        } else if(view.getId() == R.id.btn_onclick4) {
            editor.clear();
            editor.commit();
        }
        listData();
    }

    public void saveData() {
        editor.putBoolean("isShare", true);
        editor.putFloat("fRate", 1.33f);
        editor.putInt("nValue", 100);
        editor.putString("name", "copycoding");
        editor.apply();

    }

    public void updateData() {
        editor.putBoolean("isShare", false);
        editor.putFloat("fRate", 3.33f);
        editor.putInt("nValue", 5000);
        editor.putString("name", "copycoding.tistory");
        editor.apply();
    }

    public void deleteData() {
        editor.remove("nValue");
        editor.commit();
    }

    public void listData() {
        String dataList = "";
        Map<String, ?> totalValue = sharePref.getAll();
        for(Map.Entry<String, ?> entry : totalValue.entrySet()) {
            dataList += entry.getKey().toString()+ ": " + entry.getValue().toString() + "\r\n";
            Log.d("share : ", entry.getKey() + ": " + entry.getValue());
        }
        tvList.setText(dataList);
    }
}


4. 결과


각각의 버튼에 대한 화면 입니다.

버튼을 클릭하면 기능을 수행하고 바로 결과에 대한 리스트를 출력합니다.



android data sharedpreferences



5. APK


다운받아 테스트를 해봅니다.


SharePref.apk


- copy coding -


Tensorflow Lite 버전이 공개 되어 어느정도 크기 인지 성능은 어느정도 인지

안드로이드에서는 어떤지 궁금해서 다운받아 테스트 해보았습니다.

 

라이센스는

http://www.apache.org/licenses/LICENSE-2.0

입니다.


소스 GitHub 위치는

https://github.com/amitshekhariitbhu/Android-TensorFlow-Lite-Example

에 있습니다.

 

설명은 Git 설치, GitHub 회원가입, Android studioGit 설정이

완료되어 있는 상태에서 진행합니다.

안되어 있다면 아래 링크를 참고 하세요.

[GitHub] GitHub 회원 가입하기

 

[Git] Git 설치 하기 (Windows 용 - Git-2.20.1-64-bit)

 

[Git] Git 무설치 버전 windows 설치 하기

 

[안드로이드] Android studio에 github 환경 설정 하기

 


1. 안드로이드 스튜디오에 소스 받기

 

안드로이드 스튜디오를 실행합니다.



3번째 Check out project from Version Control에서

Git를 선택 합니다.

 

Git가 있는 URL과 다운받을 local Directory 위치를

입력하는 창이 나옵니다.



GitHub에 접속합니다.



[Clone or download]를 클릭하면 하단에 url이 나타납니다.

여기서 url 옆에 있는 아이콘을 클릭하여 클립보드에 저장합니다.

그냥 url을 드래그해서 복사해도 됩니다.



저장된 주소를 URL 입력란에 Ctrl + V로 붙여 넣기 합니다.

 

이제 주소가 맞는지 [Test] 버튼을 클릭합니다.



하단에 연결이 성공했다고 하니 안심하고

[Clone] 버튼을 누릅니다.

신규로 디렉토리를 생성할것인가 물어보는데



[Yes]를 선택해서 디렉토리를 생성하도록 합니다.

 

프로젝트 import 방법에 대한 창이 나옵니다.



여기서는 default가 상단 라디오버튼이 선택되어 있습니다.

기존에 소스가 있는 경우입니다.

당연히 처음 받는 소스이니 두번째 라디오 버튼

Import project from external model을 선택하고 [Finish] 버튼을 클릭 합니다.

 


열심히 다운로드가 진행 됩니다.

오류가 발생했습니다.

버전에 맞지 않나보네요.



우측 파란색 글씨를 눌러 android-27을 설치 합니다.



이번엔 26이 없다고 하네요



설치하라고 파란색 글씨를 또 눌러줍니다.



영차영차 열심히 설치를 알아서 계속 진행합니다.

이번엔 Gradle Plugin을 업데이트 해야 한답니다.



그래 여기까지 왔는데 이거 하나 못하겠냐

[Update]를 눌러 줍니다.

한참 sync를 맞추고 완료가 되었습니다.



우측 빨간글씨는

Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.

명칭이 변경 되었지요.

그냥 무시하고

 


2. 실행

 

실행을 해보겠습니다.

 

실행버튼을 누르고 카메라를 사용해야 하니 가상디바이스가 아닌

실제 핸드폰을 연결해서 테스트 합니다.




3. 결과

 

가까이 있는 키보드하고 종이컵을 찍어서 테스트 해보았습니다.

 

tesorflow light android


그런대로 결과가 나오는 군요.

책상이 좀 지져분 해서인지 인식률이 낮게 나옵니다.

 


4. APK


바이러스 업습니다.

심심하면 한번 다운받아서 한번 테스트 해보세요.


tensorflow_lite.apk


- copy coding -


제일 먼저 githjub에 회원가입이 되어있어야 합니다.

회원이 아니라면 먼저 https://github.com/에서 회원가입을 합니다.

 

안드로이드 스튜디오에는 git 무설치 버전을 이용한 설정에 대해 알아봅니다.

무설치 버전에 대한 윈도우 설치는

[Git] Git 무설치 버전 windows 설치 하기


일반 설치 버전은

[Git] Git 설치 하기 (Windows - Git-2.20.1-64-bit)

를 참고하세요.


저의 무설치 버전의 위치는 F:\git이며

일반 설치의 경우도 C:\Program Files\...로 위치를 잡으면 됩니다.


android github


안드로이드 스튜디오를 실행 합니다.


설정은 상단 메뉴에서

File > Settings...


메뉴를 선택 하면서 시작 합니다.



Settings.. 를 클릭하면 Settings 창이 나타납니다.


설정 메뉴는 좌측의 Version Control 하부메뉴에 있는데 찾기 힘들면

상단 검색 키워드에서 GIt로 검색하면 됩니다.

GitHubGit 메뉴가 보입니다.



먼저 GItHub부터 변경해 보겠습니다.


GitHub를 선택하면 우측에 Auth Type이 기본으로 Tocke을 되어 있습니다.

이걸 password로 변경하고 GitHub에 계정을 만들때 사용한 메일과 비밀번호를 등록합니다.

 


아이디와 비번을 입력했으면 꼭 [Test] 버튼을 클릭해서



Connection successful을 확인 합니다.

 

이번엔 Git를 선택 하고 git 실행파일을 찾어서 연결해 줍니다.

[…]을 선택해서 탐색기에서 설치 위치를 잡아줍니다.



저는 무설치 버전을 연결했습니다.

일반 설치본은 C:\Program Files 하단입니다.



이것도 [Test] 버튼을 이용하여 확인을 합니다.



설정은 완료 되었습니다.

 

무설치 버전의 경우에는 Path를 잡아야 합니다.


git 실행파일 위치를 찾아 봅니다.



찾은 위치 C:\git\cmd를 환경 변수의 path에 추가합니다.


찾은 위치 C:\git\cmd를 환경 변수의 path에 추가합니다.


환경변수 수정하는 방법은

[윈도우즈]Windows7, Windows 10 환경변수 수정하는 방법


를 참고합니다.

 

path 추가를 반영하려면 안드로이드 스튜디오를 다시 시작해서 사용합니다.


- copy coding -


핸드폰 하단에 팝업 광고가 언제부턴가 귀찮게 하네요.

대부분 하단에 버튼이 있는데 아주 교활하게 광고를 하니 짜증이 혈압을 올립니다.

 

처음엔 웹 브라우저에 문제가 있나 해서 firefox를 설치도 해봤는데



브라우저 문제도 아니고 아무때나 광고가 나옵니다.


하는 수 없이 귀찮게 앱을 하나 더 설치 합니다.

 

많이들 사용하는 고클린을 설치 합니다.


goclean popup ad


고클린을 설치하고 실행하면 설정 창이 나타납니다.

고클린도 권한이 주어져야 앱들을 관리하겠죠.

 


사용 추적 허용을 해주면 [사용] 상태로 변경 됩니다.

 

이제는 차분히 평소처럼 핸드폰을 사용하며 기다립니다.

광고가 나를 고혈압에 쓰러지게 하더라고 시간이 필요합니다.

 

하루 정도 인내의 시간이 지나고 고클린을 실행해 봅니다.



[시간별] 항목을 선택 합니다.

사용 하지도 않은 앱이 중간 중간 자주 보입니다.

 

우측 회색 [앱 제거] 버튼을 눌러 앱을 삭제 합니다.


고클린도 고생했지만 역시 토사구팽을 해야겠죠.


다시 고클린을 사용하지 않길 바라며 앱 설치시 신중해야 겠습니다.


- copy coding -


1···9101112131415

+ Recent posts