Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.xieyangxuejun:sample-android-room:1.0.2'
}
dependencies {
implementation("com.github.xieyangxuejun:sample-android-room:1.0.2")
}
<dependency>
<groupId>com.github.xieyangxuejun</groupId>
<artifactId>sample-android-room</artifactId>
<version>1.0.2</version>
</dependency>
libraryDependencies += "com.github.xieyangxuejun" % "sample-android-room" % "1.0.2"
:dependencies [[com.github.xieyangxuejun/sample-android-room "1.0.2"]]
room数据库框架使用
Room中有三个主要的组件:
Database:你可以用这个组件来创建一个database holder。注解定义实体的列表,类的内容定义从数据库中获取数据的对象(DAO)。它也是底层连接的主要入口。这个被注解的类是一个继承RoomDatabase的抽象类。在运行时,可以通过调用Room.databaseBuilder() 或者 Room.inMemoryDatabaseBuilder()来得到它的实例。
Entity:这个组件代表一个持有数据库的一个表的类。对每一个entity,都会创建一个表来持有这些item。你必须在Database类中的entities数组中引用这些entity类。entity中的每一个field都将被持久化到数据库,除非使用了@Ignore注解。
@Entity(tableName = "user")
data class User(
val name: String,
val sex: Int,
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
val createAt: Long = System.currentTimeMillis()
)
@Dao
interface UserDao {
//多个数据
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(vararg user: User): List<Long>
@Delete
fun delete(vararg user: User): Int
@Update
fun update(vararg user: User): Int
@Query("SELECT * FROM user")
fun queryAll(): List<User>
@Query("SELECT * FROM user WHERE id IN (:userIDs)")
fun queryByUserIds(vararg userIDs: Long): List<User>
@Query("SELECT * FROM user WHERE id = :id")
fun queryById(id: Long): User
}
@Database(entities = arrayOf(
User::class
), version = databaseVersion)
abstract class AppDatabase : RoomDatabase() {
abstract fun getUserDao(): UserDao
}
@SuppressLint("StaticFieldLeak")
class AppDatabaseManager {
private var mContext: Context? = null
private var mAppDatabase: AppDatabase? = null
companion object {
@Volatile
private var mInstance: AppDatabaseManager? = null
fun getInstance(): AppDatabaseManager {
if (mInstance == null) {
synchronized(AppDatabaseManager::class.java) {
if (mInstance == null) {
mInstance = AppDatabaseManager()
}
}
}
return mInstance!!
}
}
fun init(app: Application) {
mInstance?.run {
if (mContext == null) {
mContext = app.applicationContext
}
mAppDatabase = Room.databaseBuilder(
mContext!!, AppDatabase::class.java, databaseName
).build()
}
}
fun getUserDao(): UserDao = mAppDatabase?.getUserDao()!!
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Stetho.initializeWithDefaults(this)
AppDatabaseManager.getInstance().init(this.application)
}
fun clickInsert(view: View) {
getFlowable({
AppDatabaseManager.getInstance().getUserDao().insert(*arrayOf(
User("谢杨学君", 1, 1),
User("谢杨学君", 1, 2),
User("谢杨学君", 1),
User("谢杨学君", 1),
User("谢杨学君", 1)
))
}).subscribe({
Log.d("===>", "success (size= ${it.size} and ${it.joinToString()})")
}).isDisposed
}
fun clickDelete(view: View) {
getFlowable({
AppDatabaseManager.getInstance().getUserDao().delete(*arrayOf(
User("谢杨学君", 1, 1),
User("谢杨学君", 1, 2)
))
}).subscribe({
Log.d("===>", "success (count = $it)")
}).isDisposed
}
fun clickUpdate(view: View) {
getFlowable({
AppDatabaseManager.getInstance().getUserDao().delete(*arrayOf(
User("谢杨学君", 1),
User("谢杨学君", 2)
))
}).subscribe({
Log.d("===>", "success (count = $it)")
}).isDisposed
}
fun clickQueryAll(view: View) {
getFlowable({
AppDatabaseManager.getInstance().getUserDao().queryAll()
}).subscribe({
val fromList = JsonParserUtil.fromList(it)
tv_message.text = fromList
}).isDisposed
}
fun <T> getFlowable(method: () -> T): Flowable<T> {
return object : Flowable<T>() {
override fun subscribeActual(s: Subscriber<in T>) {
try {
s.onNext(method.invoke())
} catch (e: Exception) {
e.printStackTrace()
s.onError(e)
}
s.onComplete()
}
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
可以当成单独的模块来使用, fork然后写自己的Entities就行了.