1000sj
SJ CODE
1000sj
전체 방문자
오늘
어제
  • 분류 전체보기
    • Algorithms
      • Crypto
    • Security
      • 네트워크
      • 보안
      • CTF
      • Exploit
    • System Programming
      • Operating System
      • Compiler
      • Device Driver
      • Emulator
      • Parrelel Processing
      • Assembly
    • Application Programming
      • Script
      • Android
    • Cloud Computing
      • Cloud Native
      • Public Cloud
      • Infrastructure
      • Database
      • DevOps
    • TroubleShooting
    • ETC
      • 문화 생활
      • 커뮤니티

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
1000sj

SJ CODE

Application Programming/Android

[Android/Java] Sharedpreferences로 임시저장(알림같은 설정값 저장)

2021. 6. 12. 14:21

0. 데이터를 저장하고 읽는 시점

데이터를 저장하는 이유는 보통 Activity가 재실행될 때 이전의 상태를 저장해놓기 위해서이다. 따라서 onPause()가 호출될 때 데이터를 저장하는 것이 좋다. 

데이터를 읽을 때는 onCreate()처럼 초기화하는 시점이나 저장한 데이터가 필요한 시점에 읽어서 사용하면된다.

 

1. SharedPreferences 객체 생성

SharedPreferences sharedPreferences = getSharedPreferences(String 파일 이름, int mode);

매개변수

1. 파일 이름은 식별가능한 id 

2. Mode

  • MODE_PRIVATE : 자기 앱 내에서 사용, 외부 앱에서 접근 불가
  • MODE_WORLD_READABLE : 외부 앱에서 읽기 가능
  • MODE_WORLD_WRITABLE : 외부 앱에서 쓰기 가능

 

2. SharedPreferences로 데이터 저장

SharedPreferences.Editor editor = sharedPreferences.edit(); // Editor 객체 생성
editor.putString("test", value); // 저장할 data와 key값

1. .edit()으로 Editor 객체를 생성한다.

2. 객체에 putInt(), putString()과 같은 메서드를 사용하여 값을 저장한다.

  • putInt()
  • putString()
  • putLong()
  • putBoolean()
  • putFloat()
  • putStringSet()

3. commit(동기) / apply(비동기)

put을 했다고 바로 xml파일에 저장되는 것은 아니다. 데이터를 파일에 저장하려면 apply()나 commit()을 호출해야한다. commit()은 동기적으로 동작하기 때문에 처리 중인 thread가 blocking될 수 있다. 따라서 저장될 때까지 기다릴 필요가 없다면 비동기식으로 동작하는 apply()를 사용하는 것이 좋다. 

editor.apply();

 

3. 데이터 읽기

String value = sharedPreferences.getString("test","");
  • String getString(String key, String defValue)
  • int getInt(String key, int defValue)
  • long getLong(String key, long defValue)
  • float getFloat(String key, float defValue)
  • boolean getBoolean(String key, boolean defValue)
  • Set getStringSet(String key, Set defValue)

 

4. 모든 데이터 삭제

1. editor.clear()로 모든 데이터를 삭제하고

2. apply()로 삭제된 내용을 파일에 저장한다.

editor.clear();
editor.apply();

 

5. Set 객체 활용

데이터의 순서가 상관없다면 List보단 Set을 쓰는 것을 권장한다.

 

6. 전체 코드

MainActivity.java

package com.example.myapplication;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private EditText et_save;
    private String shared = "";

    // 앱을 실행했을때
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SharedPreferences sharedPreferences = getSharedPreferences(shared,0);

        String value = sharedPreferences.getString("test","");
        
        et_save = findViewById(R.id.et_save);
        et_save.setText(value);

    }
    // 액티비티를 벗어낫을때 액티비티가 파괴됨
    @Override
    protected void onDestroy() {
        super.onDestroy();

        SharedPreferences sharedPreferences = getSharedPreferences(shared,0);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        String value = et_save.getText().toString();
        editor.putString("test", value);

        editor.apply();

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et_save"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

 

 

 

 

  • Ref

https://codechacha.com/ko/android-shared-preferences/

'Application Programming > Android' 카테고리의 다른 글

[Android/Java] drawer menu  (0) 2021.06.12
[Android/Java] WebView  (0) 2021.06.12
[Android/Java] Intent  (0) 2021.06.12
[Android/Java] menu  (0) 2021.06.06
[Android/Java] Canvas, touch event 처리  (0) 2021.06.06
    'Application Programming/Android' 카테고리의 다른 글
    • [Android/Java] drawer menu
    • [Android/Java] WebView
    • [Android/Java] Intent
    • [Android/Java] menu
    1000sj
    1000sj

    티스토리툴바