Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 一起來開發Android的天氣軟件(二)

一起來開發Android的天氣軟件(二)

編輯:關於Android編程

謝謝大家對該系列博文的支持與關注,我們現在趁熱打鐵正式開始我們的Android天氣軟件的開發吧!沒有閱讀過之前關於該軟件的功能需求的同學可以先看一下 一起來開發Android的天氣軟件(一),可以先去快速浏覽一下,清楚我們的概要體系。今天我們要做的是搭建Sqlite數據庫,那這個數據庫要存儲哪些信息呢!該數據庫是用來存儲全國的省市縣的一些信息,全國共有34個省比如浙江旗下又有好多的市如杭州、溫州、湖州,杭州下面又有很多區縣,我們要做的就是把這些結構化的數據存儲到我們的數據庫中。

那麼我們現在就開始吧!我們這次使用的是LitePal的開源框架,它采用了對象關系映射(ORM)的模式,並將我們平時開發時最常用到的一些數據庫功能進行了封裝,使得不用編寫一行SQL語句就可以完成各種建表、増刪改查的操作。用起來總之非常的方便,從郭霖大神的博文中學會了解該框架後,我就快速學以致用用到這個天氣軟件的編程中來,Pratiece makes preferct,我們下面就來見識下LitePal的威力!

首先我們先要建立Province,City,County三張表。

1、Province

\

2、City

\

3、County
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD48cD48aW1nIHNyYz0="/uploadfile/Collfiles/20141202/20141202081520171.png" alt="\" />

好的,以上這是我們表的結構的廬山真面目,我們會發現每一張表都會有一個id,然後會有相應的province_code,province_name屬性,除此之外呢,city還有一個province_id列,這是一個外鍵列,是為了實現省份表與城市表的一個關聯關系,一個city表裡面存放一個具體的省份id,並且允許多個城市都存放同一個省份id,這樣一個城市就只能對應一個省份,但一個省份卻可以有多個城市,也就實現多對一的關系了!以此類推,county也有一個city_id來實現市與縣的一對多的關系,不知道大家看到這裡都理清楚了沒有我們三張表的關系呢!

\

我們知道了以上的表結構,我們可以正式進入建表操作了,這邊我在重新簡述一下使用LitePal的使用流程,如果還沒有下載這個Jar包的同學,LitePal開源項目地址:https://github.com/LitePalFramework/LitePal下載一下,首先在自己的程序導入Jar包,在在該項目的assets目錄下面新建一個litepal.xml文件,第三步再在AndroidManifest.xml中配置一下LitePalApplication了,三步就完成了該包的導入過程!

使用LitePal後呢,我們就不用"create table province (" + "id integer primary key autoincrement, " + "province_name varchar, " + "province_code varchar " )";這樣的建表語句了,一切變得很簡單。根據對象關系映射模式的理念,每一張表都應該對應一個模型(Model),也就是說,如果我們需要先建一張Provinces表,就應該有一個對應的Province模型類。需要什麼表建立一個相應的類,裡頭有什麼列就在模型類裡對應怎樣的字段,讓我們看一下!Provinces類!

import java.util.ArrayList;  
import java.util.List;  
  
import org.litepal.crud.DataSupport;  
  
public class Province extends DataSupport {  
    private int id;  
    private String province_name;  
  
    private String province_code;  
  
    private List cities = new ArrayList();  
  
    public String getProvince_code() {  
        return province_code;  
    }  
  
    public void setProvince_code(String province_code) {  
        this.province_code = province_code;  
    }  
  
    public List getCities() {  
  
        return cities;  
    }  
  
    public void setCities(List cities) {  
        this.cities = cities;  
    }  
  
    public int getId() {  
        return id;  
    }  
  
    public void setId(int id) {  
        this.id = id;  
    }  
  
    public String getProvince_name() {  
        return province_name;  
    }  
  
    public void setProvince_name(String province_name) {  
        this.province_name = province_name;  
    }  
  
}

以上就是我們的Provinces類,我們可以看到該模型類中有id,province_name,provice_code以及cities字段,並且都實現了其中的get set方法,這邊要注意一定要實現getset方法的,要不然建表會失敗的!此外,id屬性可寫可不寫,LitePal都會和人性化的自動生成的,重點在我們這邊有一個CITY的集合,這個是干什麼的呢,就是用來描述一個province對應著多個city,所以建立了一個list集合,那麼在city表又怎麼表示多對一的關系呢!

import java.util.ArrayList;  
import java.util.List;  
  
import org.litepal.crud.DataSupport;  
  
public class City extends DataSupport {  
    private int id;  
    private String city_name;  
    private String city_code;  
    private Province province;  
      
    private List counties = new ArrayList();  
  
    public List getCounties() {  
  
        return counties;  
    }  
  
    public void setCounties(List counties) {  
        this.counties = counties;  
    }  
  
    public int getId() {  
        return id;  
    }  
  
    public void setId(int id) {  
        this.id = id;  
    }  
  
    public String getCity_name() {  
        return city_name;  
    }  
  
    public void setCity_name(String city_name) {  
        this.city_name = city_name;  
    }  
  
    public String getCity_code() {  
        return city_code;  
    }  
  
    public void setCity_code(String city_code) {  
        this.city_code = city_code;  
    }  
  
    public Province getProvince() {  
        return province;  
    }  
  
    public void setProvince(Province province) {  
        this.province = province;  
    }  
  
}

從以上看出,我們只要在city表建立一個Province類就好了,表示每一個city都對應著一個Province歸屬,好的說到這裡大家都應該明白怎麼實現了吧!細心的朋友還會發現我們每一個類還繼承了一個DateSupport,這個類是為了實現LitePal數據庫的增刪改查操作的哈!

同上County表如下就好了!

[java] view plaincopy
  1. package com.melhc.model;
  2. import org.litepal.crud.DataSupport;
  3. public class County extends DataSupport {
  4. private int id;
  5. private String county_name;
  6. private String county_code;
  7. private City city;
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14. public String getCounty_name() {
  15. return county_name;
  16. }
  17. public void setCounty_name(String county_name) {
  18. this.county_name = county_name;
  19. }
  20. public String getCounty_code() {
  21. return county_code;
  22. }
  23. public void setCounty_code(String county_code) {
  24. this.county_code = county_code;
  25. }
  26. public City getCity() {
  27. return city;
  28. }
  29. public void setCity(City city) {
  30. this.city = city;
  31. }
  32. } 好的,通過以上操作我們就完成了三張表的建立,別忘了一件事在assets文件的litepal.xml文件修改

    [html] view plaincopy

    1. OK,下面為了方便我們的數據庫操作,我們在封裝一個 WeatherDB類,實現對數據庫的正式生成和增刪改查操作!

      [java] view plaincopy
      1. /**
      2. * 將provice實例存儲到數據庫
      3. */
      4. public void saveProvice(Province province) {
      5. if (province != null) {
      6. province.save();
      7. }
      8. }
        我們可以看到在存儲province的信息時,該方法只要傳入一個province類,然後調用province.save方法就可以實現數據庫的插入,那麼怎麼插入數據庫這些字段的呢,我們只要先新建一個province類,然後再把網絡讀取的信息通過province.setProvice_name()等set方法傳入即可了,是不是非常簡單呢!Province province = new Province();province.setProvince_code(array[0]); province.setProvince_name(array[1]);

        那麼下面問題又來了我們怎麼實現city與Province的表與表之間的關聯關系呢,其實也非常簡單,只要將city對應的province得到,並用set方法構造進入就好了!我們來看一下

        [java] view plaincopy
        1. City city = new City();
        2. city.setCity_code(array[0]);
        3. city.setCity_name(array[1]);
        4. city.setProvince(province);
        5. weatherDB.saveCity(city); 是不是非常簡單呢!那麼如何讀取呢,這個就更簡單了,建立一個Province類的list集合,調用DateSupport的findAll()方法即可得到,查詢的方式還有很多,我這邊就不一一列舉了,你還可以增加很多查詢的刪選條件等等。
          [java] view plaincopy
          1. /**
          2. * 從數據庫讀取全國所有的省份信息
          3. */
          4. public List loadProvices() {
          5. List list = DataSupport.findAll(Province.class);
          6. return list;
          7. } 那麼如何查詢city表的數據呢?我們知道每一個城市都對應著一個省province,那麼我們先通過與之關聯的province_id找到它對應的province類,問題就解決一大半了,然後再通過這個province類的getCities()方法即可返回該省下面的所有城市列表!

            [java] view plaincopy
            1. /**
            2. * 從數據庫讀取某省下的所有的城市信息
            3. */
            4. public List loadCities(int provinceId) {
            5. Province provice = DataSupport.find(Province.class, provinceId,true);
            6. List list = provice.getCities();
            7. return list;
            8. } 好的關鍵點都解釋完了,我們來看一下這個類的全貌吧!

              [java] view plaincopy
              1. package com.melhc.db;
              2. import java.util.List;
              3. import org.litepal.crud.DataSupport;
              4. import org.litepal.tablemanager.Connector;
              5. import com.melhc.model.City;
              6. import com.melhc.model.County;
              7. import com.melhc.model.Province;
              8. import android.database.sqlite.SQLiteDatabase;
              9. public class WeatherDB {
              10. /**
              11. * 一些基本的數據庫方法封裝
              12. */
              13. private SQLiteDatabase db;
              14. private static WeatherDB weatherDB;
              15. public WeatherDB() {
              16. // TODO Auto-generated constructor stub
              17. db = Connector.getDatabase();//正式生成數據庫
              18. }
              19. public synchronized static WeatherDB getInstance() {
              20. if (weatherDB == null) {
              21. weatherDB = new WeatherDB();
              22. }
              23. return weatherDB;
              24. }
              25. /**
              26. * 將provice實例存儲到數據庫
              27. */
              28. public void saveProvice(Province province) {
              29. if (province != null) {
              30. province.save();
              31. }
              32. }
              33. /**
              34. * 從數據庫讀取全國所有的省份信息
              35. */
              36. public List loadProvices() {
              37. List list = DataSupport.findAll(Province.class);
              38. return list;
              39. }
              40. /**
              41. * 將city實例存儲到數據庫
              42. */
              43. public void saveCity(City city) {
              44. if (city != null) {
              45. city.save();
              46. }
              47. }
              48. /**
              49. * 從數據庫讀取某省下的所有的城市信息
              50. */
              51. public List loadCities(int provinceId) {
              52. Province provice = DataSupport.find(Province.class, provinceId,true);
              53. List list = provice.getCities();
              54. return list;
              55. }
              56. /**
              57. * 將county實例存儲到數據庫
              58. */
              59. public void saveCounty(County county) {
              60. if (county != null) {
              61. county.save();
              62. }
              63. }
              64. /**
              65. * 從數據庫讀取某城市下的所有的縣信息
              66. */
              67. public List loadCounties(int cityId) {
              68. City city = DataSupport.find(City.class, cityId,true);
              69. List list = city.getCounties();
              70. return list;
              71. }
              72. /**
              73. * 關閉數據庫
              74. */
              75. public void destroyDB() {
              76. if (db != null) {
              77. db.close();
              78. }
              79. }
              80. }
                好的,這一節課的內容就講到這裡,第一次博文碼那麼多字,感覺萌萌哒啊,希望大家通過這篇博文能對LitePaL框架有一個更好的認識,也希望大家能繼續支持該系列的博文,你們的支持是我寫下去的最大動力!今天的數據庫設計就到此結束,下一篇博文也會很快跟大家見面的。

                下面是該應用的Git開源地址,https://github.com/melhc/SimpleWeather

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved