日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 架构 -- Room

發布時間:2025/4/16 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 架构 -- Room 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

gradle依賴:

// add for room implementation "android.arch.persistence.room:runtime:1.1.1" // room 配合 RxJava implementation "android.arch.persistence.room:rxjava2:1.1.1" annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'// RxJava implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'io.reactivex.rxjava2:rxjava:2.1.3'

model對象:

import android.arch.persistence.room.Entity; import android.arch.persistence.room.PrimaryKey;@Entity public class User {// 用 @ColumnInfo 來標明數據庫表的列名, 用 @PrimaryKey 來標示 主鍵@PrimaryKey(autoGenerate = true)private long uid;private String name;private String address;private String phone;private Integer age;public long getUid() {return uid;}public void setUid(long uid) {this.uid = uid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" + "uid=" + uid + ", name='" + name + '\'' + ", address='" + address + '\'' + ", phone='" + phone + '\'' + ", age=" +age + '}';} }

相對應的DAO類:

  • Room也可以返回RxJava2中Publisher和Flowable:
  • import android.arch.persistence.room.Dao; import android.arch.persistence.room.Insert; import android.arch.persistence.room.OnConflictStrategy; import android.arch.persistence.room.Query; import java.util.List;import io.reactivex.Flowable;@Dao public interface UserDao {@Insert(onConflict = OnConflictStrategy.REPLACE)List<Long> insert(User... users);@Query("SELECT * from user")Flowable<List<User>> loadUser();@Deletevoid delete(User user); }

    當準備好所有的 Model 和 DAO 后,我們就需要把它放入 DataBase 的管理中:

    package com.soyoungboy.room.database;import android.arch.persistence.room.Database; import android.arch.persistence.room.RoomDatabase; import android.arch.persistence.room.TypeConverters;import com.soyoungboy.room.database.daos.BookDao; import com.soyoungboy.room.database.daos.UserDao; import com.soyoungboy.room.database.entities.Book; import com.soyoungboy.room.database.entities.User;@Database(entities = {User.class, Book.class}, version = 3) @TypeConverters({Converters.class}) public abstract class AppDatabase extends RoomDatabase {public abstract UserDao userDao();public abstract BookDao bookDao();}

    Converters.java為時間轉換的類:

  • 如果想要在數據庫中存儲Date,可以存儲等價的Unix時間戳
  • public class Converters {@TypeConverterpublic static Date fromTimestamp(Long value) {return value == null ? null : new Date(value);}@TypeConverterpublic static Long dateToTimestamp(Date date) {return date == null ? null : date.getTime();} }

    Room數據庫數據庫升級:

  • Room使用Migration來實現數據庫的遷移。每個Migration都指定了startVersion和endVersion。
  • import android.app.Application; import android.arch.persistence.db.SupportSQLiteDatabase; import android.arch.persistence.room.Room; import android.arch.persistence.room.migration.Migration;public class AppApplication extends Application {private AppDatabase mAppDatabase;@Overridepublic void onCreate() {super.onCreate();mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "android_room_dev.db").allowMainThreadQueries().addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();}public AppDatabase getAppDatabase() {return mAppDatabase;}/*** 數據庫版本 1->2 user表格新增了age列*/static final Migration MIGRATION_1_2 = new Migration(1, 2) {@Overridepublic void migrate(SupportSQLiteDatabase database) {database.execSQL("ALTER TABLE User ADD COLUMN age integer");}};/*** 數據庫版本 2->3 新增book表格*/static final Migration MIGRATION_2_3 = new Migration(2, 3) {@Overridepublic void migrate(SupportSQLiteDatabase database) {database.execSQL("CREATE TABLE IF NOT EXISTS `book` (`uid` INTEGER PRIMARY KEY autoincrement, `name` TEXT , `userId` INTEGER, 'time' INTEGER)");}}; }

    操作數據庫:

    1,首先獲取AppDatabase對象:

    AppDatabase mAppDatabase = ((AppApplication)getApplication()).getAppDatabase();

    2,新增操作:

    User user = new User();user.setPhone("18320770932");user.setAddress("深圳");user.setName("soyoungboy");// user.setAge("28");List<Long> ids = mAppDatabase.userDao().insert(user);

    3,查詢操作:

    mAppDatabase.userDao().loadUser().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<List<User>>() {@Overridepublic void accept(List<User> entities) {if (entities != null) {for (User user : entities) {Log.d("soyoungboy", user.toString());}}}});

    4,刪除操作:

    findViewById(R.id.button_delete_user).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {User user = new User();user.setPhone("18320770932");user.setAddress("深圳");user.setName("soyoungboy");user.setUid(5);UserDao userDao = mAppDatabase.userDao();userDao.delete(user);}});

    總結

    以上是生活随笔為你收集整理的Android 架构 -- Room的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。