Android Kotlin|Room DBの使い方と例
What is?
スタジオは、スポンサーの組み込みデータベースにデータを格納するオブジェクトリレーションシップマッピング(ORM)ライブラリです.簡単に言えば.ROOMの役割は、データベース内のオブジェクトをjavaまたはcortlin内のオブジェクトにマッピングすることです.
スタジオはSQLiteの抽象層の上にあり、SQLiteのすべての機能を提供し、便利なデータベースにアクセスできます.
Why?
ROMとSQLiteの違いは、
SQLiteの場合、コンパイル時にクエリエラーはチェックされませんが、ROOMではコンパイル中にSQLの互換性をチェックできます.
変更を計画している場合は、SQLクエリーを手動で更新する必要がありますが、ROMは簡単に解決できます.
SQLiteでは、JavaまたはKotlinのオブジェクトを置き換えるには、Boiler Plate codeを使用する必要がありますが、スタジオでは、[オブジェクトリレーションシップマッピング](Object Relationship Mapping)を使用すると、共通の領域コードがない場合にマッピングできます.
スタジオでは、LiveDataとRxJavaの観測を作成して実行できますが、SQLiteではありません.
スタジオの構造
スタジオは3つのコンポーネント(Database、Entity、Dao)で構成されています.
データをDataBase-appに永続的に保存し、プライマリ・アクセス・ポイントと基本的に接続するために使用
Entity:データベース内のテーブルをクラスとして表示します.
≪データベース・アクセス・オブジェクト|Database Access Objects|Eas≫-データベースにアクセスする方法が含まれます.(select、insert、delete...)
ルームの使用
勾配の設定
dependencies {
def room_version = "2.3.0"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
// optional - RxJava2 support for Room
implementation "androidx.room:room-rxjava2:$room_version"
// optional - RxJava3 support for Room
implementation "androidx.room:room-rxjava3:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"
// optional - Test helpers
testImplementation "androidx.room:room-testing:$room_version"
// optional - Paging 3 Integration
implementation "androidx.room:room-paging:2.4.0-rc01"
}
Entityの設定
import androidx.room.Entity
import androidx.room.PrimaryKey
import java.io.PipedWriter
@Entity
data class LoginEntity(
val username: String,
val password: String
) {
@PrimaryKey(autoGenerate = true) var id: Int = 0
}
DAO設定
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface LoginDao {
@Query("Select * From LoginEntity")
fun getLogin() : LoginEntity
@Query("DELETE From LoginEntity")
fun deleteLogin()
@Insert
fun insetLogin(loginEntity: LoginEntity)
}
データベースの設定
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
@Database(
entities = [LoginEntity::class],
version = 1,
exportSchema = false
)
abstract class LoginDatabase: RoomDatabase() {
abstract fun loginDao() : LoginDao
companion object {
private var instance: LoginDatabase? = null
@Synchronized
fun getInstance(context: Context): LoginDatabase? {
if (instance == null) {
synchronized(LoginDatabase::class) {
instance = Room.databaseBuilder(
context.applicationContext,
LoginDatabase::class.java,
"login-database"
)
.build()
}
}
return instance
}
}
}
MainActivity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.saehyun.roomexample.database.LoginEntity
import com.saehyun.roomexample.database.LoginDatabase
import com.saehyun.roomexample.databinding.ActivityMainBinding
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var db: LoginDatabase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
db = LoginDatabase.getInstance(applicationContext)!!
refreshLogin()
binding.btn.setOnClickListener {
addLogin()
refreshLogin()
startLogin()
}
}
private fun startLogin() {
startActivity(Intent(applicationContext, SuccessActivity::class.java))
}
private fun addLogin() {
val username = binding.etID.text.toString()
val password = binding.etPW.text.toString()
CoroutineScope(Dispatchers.IO).launch {
db.loginDao().insetLogin(LoginEntity(username, password))
}
}
private fun refreshLogin() {
CoroutineScope(Dispatchers.Main).launch {
val data = CoroutineScope(Dispatchers.IO).async {
db.loginDao().getLogin()
}.await()
if(data != null) {
binding.etID.setText("${data.username}")
binding.etPW.setText("${data.password}")
}
}
}
}
activity_main
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="104dp"
android:text="AutoLogin"
android:textSize="24dp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:hint="ID"
android:paddingLeft="24dp"
android:id="@+id/etID"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="52dp"
android:layout_marginEnd="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<EditText
android:hint="PW"
android:paddingLeft="24dp"
android:id="@+id/etPW"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etID" />
<Button
android:id="@+id/btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="LOGIN"
app:layout_constraintEnd_toEndOf="@+id/etPW"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="@+id/etPW"
app:layout_constraintTop_toBottomOf="@+id/etPW" />
</androidx.constraintlayout.widget.ConstraintLayout>
上記のコードを作成して実行することで、スタジオが正常に動作していることを確認できます.End
上で使用した「自動登録」の例を羽状バニラに載せましたので、参考にして勉強してください.ありがとうございます.
Reference
この問題について(Android Kotlin|Room DBの使い方と例), 我々は、より多くの情報をここで見つけました https://velog.io/@limsaehyun/Android-Kotlin-Room-DB의-사용법과-예제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol