高德天气应用开发之十三:android room数据库 天气数据读写 使用方法

版权声明:本文为博主原创文章,未经允许不得转载,如有问题,欢迎指正,谢谢! https://blog.csdn.net/cbk861110/article/details/86670354

【版权说明】

1. 请支持原创,转载请注明出处:https://blog.csdn.net/cbk861110/article/details/86665564

2. 项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!

-------------------------------------------

基于MVVM框架的高德天气APP:


MVVM框架和组件实现:

  • Room:一个简单好用的对象映射层;其对SqliteDatabase进行了封装,简化开发者对于数据持久层的开发工作量

一、 技术背景:

room,Android推荐的DB实现库,使用库提供的大量注解自动生成相关DB类和代码,极大简化应用开发DB模块代码量;

二、 实现方式(以高德城市配置表DB为例):

1. gradle中集成Room jar:

implementation "android.arch.persistence.room:runtime:1.0.0"
implementation "android.arch.persistence.room:rxjava2:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

2. room table表实现:

@Entity(tableName = CityInfoEntity.TABLE_NAME)
public class CityInfoEntity {
    public static final String TABLE_NAME = "city_info";

    @PrimaryKey
    public long id;

    @ColumnInfo(name = "city_name")
    public String city_name;

    @ColumnInfo(name = "adcode")
    public String adcode;

    public void setCityName(String cityname) {
        city_name = cityname;
    }

    public String getCityName() {
        return city_name;
    }

    public void setAdcode(String adcode) {
        this.adcode = adcode;
    }

    public String getAdcode() {
        return adcode;
    }
}

3. room DAO 实现:

@Dao
public interface CityInfoDAO {
    @Query("SELECT * FROM " + CityInfoEntity.TABLE_NAME)
    List<CityInfoEntity> getAll();

    @Query("SELECT * FROM " + CityInfoEntity.TABLE_NAME + " WHERE id IN (:ids)")
    List<CityInfoEntity> getAllByIds(long[] ids);

    @Insert
    void insert(CityInfoEntity... entities);

    @Delete
    void delete(CityInfoEntity entity);

    @Update
    void update(CityInfoEntity entity);
}

4. room database 实现:

@Database(entities = {CityForecastEntity.class, CityInfoEntity.class}, version = 1, exportSchema = false)
public abstract class WtDatabase extends RoomDatabase {
    public static final String WEATHER_DB_NAME = "weather_db";
    private static WtDatabase mWtDatabase;
    private static final Object mLock = new Object();

    /*城市天气数据DB*/
    public abstract CityForecastDAO cityForecastDAO();

    /*城市配置表DB*/
    public abstract CityInfoDAO cityInfoDAO();

    @Override
    public void clearAllTables() {

    }

    public static WtDatabase getInstance(Context context) {
        synchronized (mLock) {
            if (mWtDatabase == null) {
                mWtDatabase =
                        Room.databaseBuilder(context.getApplicationContext(),
                                WtDatabase.class,
                                WtDatabase.WEATHER_DB_NAME)
                                /*.allowMainThreadQueries()*//*db 耗时不应在UI线程发起*/
                                .build();
            }
            return mWtDatabase;
        }
    }
}

5. room 使用方法举例(插入cityinfo data item):

private void insertCityInfo(CityInfoEntity entity) {
    WtDatabase.getInstance(WtApplication.getInstance()).cityInfoDAO().insert(entity);
}

-------------------------------------------

文章目录(未完,待续):

一:android 应用子功能及移动框架总述 https://blog.csdn.net/cbk861110/article/details/86665564

二:android 高德天气API说明及城市天气查询实现 https://blog.csdn.net/cbk861110/article/details/86665655

三:android 自定义控件实现(ActionBar + PageIndicatorView) https://blog.csdn.net/cbk861110/article/details/86665790

四:android ViewPager实现左右页面滑动切换 https://blog.csdn.net/cbk861110/article/details/86665964

五:android应用权限动态申请 https://blog.csdn.net/cbk861110/article/details/86666321

六:android RecyclerView 封装及使用 https://blog.csdn.net/cbk861110/article/details/86666392

七:android Xutils3文件下载实现(高德天气城市配置) https://blog.csdn.net/cbk861110/article/details/86666573

八:android DiskLruCache 磁盘缓存 封装和使用 https://blog.csdn.net/cbk861110/article/details/86666664

九:android ThreadPoolExecutor线程池 封装及使用  https://blog.csdn.net/cbk861110/article/details/86667101

十:android 天气网络请求框架(retrofit2&okhttp3&Gson) 封装及使用  https://blog.csdn.net/cbk861110/article/details/86667375

十一:android RxAndroid(响应式编程) 异步网络请求实现 https://blog.csdn.net/cbk861110/article/details/86669178

十二:android DataBinding 数据和UI双向绑定实现 https://blog.csdn.net/cbk861110/article/details/86669708

十三:android room数据库 天气数据读写实现 https://blog.csdn.net/cbk861110/article/details/86670354

十四:android LiveData 使用方法(实现城市天气自动刷新) https://blog.csdn.net/cbk861110/article/details/86670531

十五:android ViewModel 使用方法 https://blog.csdn.net/cbk861110/article/details/86670703

十六:android 集成友盟消息推送机制(U-Push) https://blog.csdn.net/cbk861110/article/details/86683849

-------------------------------------------

【版权说明】

1. 请支持原创,转载请注明出处:https://blog.csdn.net/cbk861110/article/details/86665564

2. 项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!

猜你喜欢

转载自blog.csdn.net/cbk861110/article/details/86670354