[Android Studio] SharedPreferences로 데이터 저장,

Jean·2023년 8월 2일
0
post-thumbnail

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            CountupTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    val activity = LocalContext.current as? Activity
                    val sharedPref = remember { activity?.getPreferences(Context.MODE_PRIVATE) }
                    var count by remember {
                        val countValue = sharedPref?.getInt("counter", 0) ?: 0
                        mutableStateOf(countValue)
                    }
                    var time by remember {
                        val timeValue = sharedPref?.getString("timer", "") ?: null
                        mutableStateOf(timeValue)
                    }

                    Box(modifier = Modifier.fillMaxSize()) {
                        Column(
                            modifier = Modifier.align(Alignment.Center),
                            horizontalAlignment = Alignment.CenterHorizontally
                        ) {
                            Button(
                                onClick = { count++ },
                                modifier = Modifier
                                    .size(200.dp, 200.dp)
                                    .padding(40.dp),
                                colors = ButtonDefaults.buttonColors(
                                    containerColor = Color(0xffcc99ff),
                                    contentColor = Color.White
                                )
                            ) {
                                Text(
                                    text = "${count}",
                                    color = Color.White,
                                    fontWeight = FontWeight.Bold,
                                    fontSize = 50.sp
                                )

                            }
                            MyButton(text = "zero") {
                                count = 0
                                sharedPref?.edit {
                                    putInt("counter", count)
                                    apply()
                                }
                            }
                            MyButton(text = "decrease") {
                                count--
                                sharedPref?.edit {
                                    putInt("counter", count)
                                    apply()
                                }

                            }
                            MyButton(text = "double") {
                                count *= 2
                                sharedPref?.edit {
                                    putInt("counter", count)
                                    apply()
                                }
                            }
                            MyButton(text = "half") {
                                count /= 2
                                sharedPref?.edit {
                                    putInt("counter", count)
                                    apply()
                                }
                            }

                            Button(
                                onClick = {
                                //참고
                                    time = showCurrentTime()
                                    sharedPref?.edit {
                                        putString("timer", time)
                                        apply()
                                    }
                                },
                                modifier = Modifier
                                    .size(200.dp, 80.dp)
                                    .padding(10.dp),
                                colors = ButtonDefaults.buttonColors(
                                    containerColor = Color(0xff75bbcf),
                                    contentColor = Color.White
                                )
                            )
                            {
                                Text(
                                //참고
                                    text = "$time",
                                    color = Color.White,
                                    fontWeight = FontWeight.Bold,
                                    fontSize = 30.sp
                                )
                            }
                        }
                    }
                }
            }
        }
    }
}
//현재 시간 보여주는 함수
fun showCurrentTime() : String{
    val time = SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(Date())
    return time
}


@Composable
fun MyButton(text: String, onClick: () -> Unit) {
    Button(
        onClick = onClick,
        modifier = Modifier
            .size(200.dp, 80.dp)
            .padding(10.dp),
        colors = ButtonDefaults.buttonColors(
            containerColor = Color(0xff75bbcf),
            contentColor = Color.White
        )
    )
    {
        Text(
            text = "$text",
            color = Color.White,
            fontWeight = FontWeight.Bold,
            fontSize = 30.sp
        )

    }
}
  • 현재 시간 보여주는 코틀린 함수
  • sharedPref를 활용한 공유환경설정 읽기 및 쓰기 활용
  • 앱을 끄고 다시 켜도 값이 저장됨!
profile
아 왜 안돼

0개의 댓글