本来是名iOS开发者由于对安卓好奇,一步一步来学习
什么也不说了先上代码吧.
第一步 添加依赖build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
allprojects {
repositories {
maven {
url 'https://maven.google.com'
}
google()
jcenter()
}
}
第二 找到build.gradle(Module.app)
apply plugin: 'kotlin-kapt'
//使用生成文件
kapt {
generateStubs = true
}
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.apidebug"
minSdkVersion 26
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
def room_version = "1.1.1"
// 添加json转换第三方
implementation "com.google.code.gson:gson:2.8.5"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
//robolectric测试
testImplementation 'org.robolectric:shadows-multidex:3.8'
testImplementation "org.robolectric:robolectric:3.8"
//更改为
implementation 'com.android.support.test:runner:1.0.2'
第三步 创建一个数据模型 User为例
package com.example.apidebug
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
class User {
@PrimaryKey
var uid:Int? = null
@ColumnInfo(name = "first_name")
var firstName:String? = null
@ColumnInfo(name = "last_name")
var lastName:String? = null
}
第四步 UserDao
package com.example.apidebug
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
@Dao
public interface UserDao:BaseDao{
@Query("SELECT * FROM User")
fun getAll(): List
@Query("SELECT * FROM User WHERE uid IN (:userIds)")
fun loadAlllByIds(userIds:List ):List
}
第五步 其实还是要写个父类BaseDao 把公用的写到父类里
package com.example.apidebug
import androidx.room.*
@Dao
interface BaseDao{
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(list: MutableList)
@Delete
fun delete(element: T)
@Delete
fun deleteList(elements:MutableList)
@Delete
fun deleteSome(vararg elements:T)
@Update
fun update(element: T)
}
第六步写一个全局的Application 单利MyApplication
别网络写好之后在AndroidManifest.xml 的
package com.example.apidebug
import android.app.Application
import kotlin.properties.Delegates
class MyApplication :Application(){
companion object {
private var instance:MyApplication by Delegates.notNull()
fun instance() = instance!!
}
override fun onCreate() {
super.onCreate()
instance = this
}
}
第七步 写一个集成RoomDatabase的单利子类 AppDatabase
package com.example.apidebug
import androidx.room.Database
import androidx.room.RoomDatabase
import android.icu.lang.UCharacter.GraphemeClusterBreak.V
import androidx.room.Room
@Database(entities = arrayOf(User::class), version = 1)
public abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object{
val instance = Single.sin
}
private object Single {
val sin :AppDatabase = Room.databaseBuilder(
MyApplication.instance(),
AppDatabase::class.java,
"User1"
)
.allowMainThreadQueries()
.build()
}
}
第八步 自我检测了
package com.example.apidebug
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.gson.Gson
class MainActivity : AppCompatActivity() {
var sDao: UserDao = AppDatabase.instance.userDao()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var lista = sDao.getAll()
println("lista ${Gson().toJson(lista)}")
var sList:MutableList = mutableListOf()
var model = User()
model.firstName = "小明"
model.lastName = "黑"
sList.add(model)
sDao.insertAll(sList)
// this.navigate
}
}
文章到此结束了,自己在学的时候遇到的坑,期望其他的小伙伴可以绕过这个坑喜欢的话点个赞,以后有更多分享内容