استفاده از دیتابیس Room در اندروید
شاید شده باشه تا حالا با خودتون فکر کرده باشین چجوری میشه داخل اپ اندرویدی خودتون اطلاعات رو آفلاین ذخیره و استفاده کنین!؟ یا نیاز داشتین یک ساختار منسجم و مشخص برای ذخیره سازی اطلاعات کاربرتون داخل اپ داشته باشید. در این پست قصد داریم اموزش ساخت یک دیتابیس با یک Entity به نام User رو ببینیم:
در ابتدا این کتابخانه هارو به dependencies خودتون در فایل .gradle اضافه کنید.
// Room components implementation "android.arch.persistence.room:runtime:$roomComponentsVersion" annotationProcessor "android.arch.persistence.room:compiler:$roomComponentsVersion" // Lifecycle components implementation "android.arch.lifecycle:extensions:$lifecycleComponentsVersion" annotationProcessor "android.arch.lifecycle:compiler:$lifecycleComponentsVersion"
سپس برای ساخت Entity خود یک class به نام User ایجاد کنید.
@Entity public class User { @PrimaryKey public int uid; @ColumnInfo(name = "first_name") public String firstName; @ColumnInfo(name = "last_name") public String lastName; }
- توجه کنید که هر Entity باید حتما شامل یک PrimaryKey باشد.
سپس یک فایل interface با نام UserDao ایجاد کنید.
@Dao public interface UserDao { @Query("SELECT * FROM user") List<User> getAll(); @Query("SELECT * FROM user WHERE uid IN (:userIds)") List<User> loadAllByIds(int[] userIds); @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") User findByName(String first, String last); @Insert void insertAll(User... users); @Delete void delete(User user); }
در این فایل میتوانید query های مورد نیاز خود را اضافه کنید.
و در مرحله اخر:
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { private static AppDatabase INSTANCE; public abstract UserDao userDao(); /** * create db if it dose not exist and then return db * * @param context * @return an object of db */ public static AppDatabase getAppDatabase(Context context) { if (INSTANCE == null) { INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "vitamin_database") // allow queries on the main thread. // Don't do this on a real app! See PersistenceBasicSample for an example. .allowMainThreadQueries() .build(); } return INSTANCE; } public static void destroyInstance() { INSTANCE = null; } }
در نهایت به راحتی میتوانید اطلاعات خودتون رو به table اضافه، دریافت و یا پاک کنید. کافیست به هنگام نیاز تابع getAppDatabase رو صدا زده و از آن استفاده کنید.