Android Room的簡單使用

1、指定版本號,實體類,注意extend RoomDatabase

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

    public abstract UserDao userDao();

}

2、Application中初始化 allowMainThreadQueries()用於允許主線程查詢

public class AppApplication extends Application {

    private AppDatabase mAppDatabase;

    @Override
    public void onCreate() {
        super.onCreate();
        mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "android_room_dev.db")
                           .allowMainThreadQueries()
                           .build();
    }

    public AppDatabase getAppDatabase() {
        return mAppDatabase;
    }
    
}

3、實體類處指定 表的名稱, 要有主鍵,非基本類型要加@TypeConverters,get,set方法爲必需

@Entity(tableName = "cache_home")
public class HomeDataBean {
    @PrimaryKey(autoGenerate = true)
    private int h_id;

    @TypeConverters(BannerBeanTypeConverter.class)
    private List<BannerBean> banner;
}

4、Dao,執行數據庫操作 刪除全部數據也要用 @Query,@Delete可以刪除單條數據

@Dao
public interface CacheDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertCaches(HomeDataBean... homeDataBeans);

    @Query("Delete FROM cache_home")
    void deleteAll();

    @Query("SELECT * from cache_home")
    HomeDataBean[] findAll();

}

5、typeconvert類 指定自定義Bean和String的相互轉換過程

public class ActivityBeanTypeConverter {
    Gson gson = new Gson();

    @TypeConverter
    public List<HomeDataBean.ActivityBean> stringToSomeObjectList(String data) {
        if (data == null) {
            return Collections.emptyList();
        }
        Type listType = new TypeToken<List<HomeDataBean.ActivityBean>>() {
        }.getType();

        return gson.fromJson(data, listType);
    }

    @TypeConverter
    public String someObjectListsToString(List<HomeDataBean.ActivityBean> someObjects) {
        return gson.toJson(someObjects);
    }
}

6、使用

mAppDatabase.dao.insert(...)

7、推薦文章

Room學習文章推薦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章