第一篇博客——安卓酷欧天气
第一部分——创建数据库和表
首先在com.coolweather.android包下创建 db geon service util包用于存放代码。
编辑build.gradle文件,在dependencise闭包中添加如下代码来声明依赖库:
implementation 'org.litepal.android:core:1.4.1'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.google.code.gson:gson:2.7'
implementation 'com.github.bumptech.glide:glide:3.7.0'
在db包中建立Province类用于存放省级信息
package com.weather.weather.db;
import org.litepal.crud.DataSupport;
public class Province extends DataSupport {
private int id;
private String provinceName;
private int provinceCode;
public int getId() {return id;}
public void setId(int id) { this.id = id; }
public String getProvinceName(){return provinceName; }
public void setProvinceName(String provinceName){
this.provinceName = provinceName;
}
public int getProvinceCode() { return provinceCode; }
public void setProvinceCode(int provinceCode) {
this.provinceCode = provinceCode;
}
}
继续创建City包用于存放市级信息
package com.weather.weather.db;
import org.litepal.crud.DataSupport;
public class Province extends DataSupport {
private int id;
private String provinceName;
private int provinceCode;
public int getId() {return id;}
public void setId(int id) { this.id = id; }
public String getProvinceName(){return provinceName; }
public void setProvinceName(String provinceName){
this.provinceName = provinceName;
}
public int getProvinceCode() { return provinceCode; }
public void setProvinceCode(int provinceCode) {
this.provinceCode = provinceCode;
}
}
继续创建County类用于存放县级信息
package com.weather.weather.db;
import org.litepal.crud.DataSupport;
public class County extends DataSupport{
private int id;
private String countyName;
private String weatherId;
private int cityId;
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getCountyName(){
return countyName;
}
public void setCountyName(String countyName){
this.countyName =countyName;
}
public String getWeatherId(){
return weatherId;
}
public void setWeatherId(String weatherId) {
this.weatherId = weatherId;
}
public int getCityId(){
return cityId;
}
public void setCityId(int cityId){
this.cityId=cityId;
}
}
然后在litepal文件中指定数据库名称和版本。代码如下。
<litepal>
<dbname value="cool_weather"/>
<version value="1"/>
<list>
<mapping class="com.weather.weather.db.Province"/>
<mapping class="com.weather.weather.db.City"/>
<mapping class="com.weather.weather.db.County"/>
</list>
</litepal>
接下来配置LitePalApplication。修改AndroidMainifest中的代码如下:
<application
android:name="org.litepal.LitePalApplication"
android:allowBackup="true"
至此,第一阶段完成,开始进入第二阶段的开发。
第二阶段——遍历全国省市县数据
在util包下增加HttpUtil类,输入用于和服务器交互的代码,如下:
public class HttpUtil {
public static void sendOkHttpRequest(String address,okhttp3.Callback callback){
OkHttpClient client =new OkHttpClient();
Request request=new Request.Builder().url(address).build();
client.newCall(request).enqueue(callback);
}
接下来我们需要提供一个工具类来解析和处理服务器返回的JSON格式的数据,在util包下新建一个Utility类,代码如下;
package com.weather.weather.util;
import android.text.TextUtils;
import com.google.gson.Gson;
import com.weather.weather.db.City;
import com.weather.weather.db.County;
import com.weather.weather.db.Province;
import com.weather.weather.gson.Weather;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class Utility {
/*解析和处理服务器返回的省级数据*/
public static boolean handleProvinceResponse(String response){
if (!TextUtils.isEmpty(response)) {
try {
JSONArray allProvinces = new JSONArray(response);
for (int i = 0; i < allProvinces.length(); i++) {
JSONObject provinceObject = allProvinces.getJSONObject(i);
Province province = new Province();
province.setProvinceName(provinceObject.getString("name"));
province.setProvinceCode(provinceObject.getInt("id"));
province.save();
}
return true;
} catch (JSONException e) {
e.printStackTrace();
}
}
return false;
}
/*解析和处理服务器返回的市级数据*/
public static boolean handleCityResponse(String response, int provinceId) {
if (!TextUtils.isEmpty(response)) {
try {
JSONArray allCities = new JSONArray(response);
for (int i = 0; i < allCities.length(); i++) {
JSONObject cityObject = allCities.getJSONObject(i);
City city = new City();
city.setCityName(cityObject.getString("name"));
city.setCityCode(cityObject.getInt("id"));