지난번에 입력 이벤트까지는 구현했었는데, 이게 따로 db를 구현하지 않고 만드니까,
Activity가 새로 실행될 때마다 변수가 리셋되어서 제대로 된 페이지를 만들 수가 없었다.
그래서 SQLite를 연동해서 db를 생성해보기로 했다.
SQLite를 활용하기 위해서는 다음과 같이 dbHelper 클래스를 하나 만들어주어야 한다.
package com.example.again
import android.annotation.SuppressLint
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.provider.BaseColumns
class DBHelper(context: Context)
: SQLiteOpenHelper(context, "Login.db", null, 1) {
override fun onCreate(db: SQLiteDatabase?) {
val sql: String = " CREATE TABLE IF NOT EXISTS MYTABLE( " +
" SEQ INTEGER PRIMARY KEY AUTOINCREMENT, " +
" ID TEXT, PASSWORD TEXT) "
db?.execSQL(sql)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
val sql: String = " DROP TABLE IF EXISTS MYTABLE"
db?.execSQL(sql)
onCreate(db)
}
fun insert(id: String, pw: String) {
val db = this.writableDatabase
val sql = " INSERT INTO MYTABLE(ID, PASSWORD) VALUES ('${id}', '${pw}') "
db?.execSQL(sql)
}
fun check(id: String): Boolean {
val db = this.readableDatabase
val sql = db.rawQuery("SELECT * FROM MYTABLE WHERE id = ?", arrayOf(id))
var result = sql.moveToFirst()
sql.close()
return result
}
fun login(id: String, pw: String): Boolean{
val db = this.readableDatabase
println(db)
val sql = db.rawQuery("SELECT * FROM MYTABLE WHERE id = ? and password = ?", arrayOf(id, pw))
var result = sql.moveToFirst()
sql.close()
return result
}
}
설명을 해보자면, dbHelper 클래스 내부적으로 Login.db라는 데이터베이스를 만들어서 seq, id, password 열을 하나씩 만들어준다.
그 뒤에 밑에는 check와 login 함수를 구현해서 각각 아이디 중복체크, 그리고 로그인 확인을 해줄 수 있도록 해준다.
이렇게 만들어주고, 회원가입 페이지는 다음과 같이 수정해준다.
package com.example.again
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import android.view.View
import android.widget.Toast
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.content.Intent
class subActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub2)
var dbHelper = DBHelper(this)
var id = ""
var password = ""
val register_id_repeat = findViewById<Button>(R.id.register_id_repeat)
val register_click = findViewById<Button>(R.id.register_click)
var id_checked = false
register_id_repeat.setOnClickListener{
id = findViewById<EditText>(R.id.id).text.toString()
if (id == ""){
Toast.makeText(this, this.getString(R.string.input_id), Toast.LENGTH_SHORT).show()
}
else {
var Find = dbHelper.check(id)
if (Find){
Toast.makeText(this, this.getString(R.string.is_id_duplicated), Toast.LENGTH_SHORT).show()
}
else{
Toast.makeText(this, this.getString(R.string.useable_id), Toast.LENGTH_SHORT).show()
id_checked = true
}
}
}
register_click.setOnClickListener{
if (id_checked == false){
Toast.makeText(this,this.getString(R.string.check_id), Toast.LENGTH_SHORT).show()
}
else {
password = findViewById<EditText>(R.id.password).text.toString()
var password_check = findViewById<EditText>(R.id.password_check).text.toString()
if (password == "") {
Toast.makeText(this, this.getString(R.string.input_password), Toast.LENGTH_SHORT).show()
} else if (password_check == "") {
Toast.makeText(this, this.getString(R.string.check_password), Toast.LENGTH_SHORT).show()
} else if (password != password_check) {
Toast.makeText(this, this.getString(R.string.password_match_false), Toast.LENGTH_SHORT)
.show()
} else {
val result = dbHelper.insert(id, password)
Toast.makeText(this, "회원가입에 성공하였습니다.", Toast.LENGTH_SHORT).show()
Thread.sleep(500)
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
}
}
}
}
}
이렇게 되면 따로 database 폴더에 Login.db 라는 데이터베이스 파일이 생성되면서 아이디 중복체크도 가능해지고, 회원가입을 하면서 데이터도 추가할 수 있게 된다.
그리고 마지막으로 로그인 페이지는 다음과 같이 수정해준다.
package com.example.again
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import android.view.View
import android.widget.Toast
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.content.Intent
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import java.io.Serializable
class User(var id : String, var pw : String): Serializable{
constructor(): this("", "")
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
var dbHelper = DBHelper(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val clickme = findViewById<Button>(R.id.click_me)
val register = findViewById<TextView>(R.id.register)
register.setOnClickListener{
val intent = Intent(this, subActivity::class.java)
startActivity(intent)
}
clickme.setOnClickListener{
var id = findViewById<EditText>(R.id.id).text.toString()
var password = findViewById<EditText>(R.id.password).text.toString()
var Find = dbHelper.login(id, password)
if(id == ""){
Toast.makeText(this, this.getString(R.string.input_id), Toast.LENGTH_SHORT).show()
}
else if(password == ""){
Toast.makeText(this, this.getString(R.string.input_password), Toast.LENGTH_SHORT).show()
}
else{
if (Find){
Toast.makeText(this, this.getString(R.string.login_success), Toast.LENGTH_SHORT).show()
Thread.sleep(500)
val intent = Intent(this, MainActivity2::class.java)
startActivity(intent)
}
else{
Toast.makeText(this, this.getString(R.string.login_failed), Toast.LENGTH_SHORT).show()
}
}
}
}
}
이렇게 만들면, 다음과 같이 깔끔하게 구현이 된다.
'기타 지식들 > 개발 관련' 카테고리의 다른 글
| Android studio를 Firebase와 연동해서 실시간 채팅 어플 구현하기 (0) | 2025.03.02 |
|---|---|
| Kotlin으로 입력 이벤트 구현하기 (0) | 2025.02.24 |
| Nox 앱 플레이어와 연계해서 frida 설치하기 (0) | 2025.02.23 |