一 数据库中的错误
开发使用的是litepal操作数据库,是一种将数据库表等映射为类的操作方式。
在litepal.xml中要添加相应的映射类,添加的应该为相对映射类的路径,而第一行代码上路径不对,改正后bug解决。
1 <litepal>
2 <!--数据库名称和版本-->
3 <dbname value="Mask_weather"/>
4 <version value="1"/>
5 <!--将三个实体类添加到映射的列表中-->
6 <list>
7 <mapping class="com.example.maskweather.db.City"/>
8 <mapping class="com.example.maskweather.db.County"/>
9 <mapping class="com.example.maskweather.db.Province"/>
10 </list>
11
12 </litepal>
二 遍历省市县时,访问不到具体的县
这个问题犯得其实很低级,开始遍历不到县,然后就在过了一遍碎片中的代码,然后发现在queryFromService()方法中 加载服务器数据成功,将json数据成功解析后,在if()中重新执行queryCounties();时写错了
else if ("country".equals(type)) {
queryCounties();
}
//这是正确的写法
else if ("country".equals(type)) {
queryCities();
}
//我写错了 又查询了一次市
在解决完整个问题之后,还是不能成功访问到县,使用log的方法,将访问县的过程每一步打log判断是否走到这个步骤,然后发现。原来是country的单词拼错了,所以if()判断进不去,导致的不能访问。就是一下部分中if判断里的country两个单词。。
1 @Override
2 public void onResponse(Call call, Response response) throws IOException {
3 String responseText = response.body().string();
4 boolean result = false;
5 if ("province".equals(type)) {
6 result = Utility.handleProvinceResponse(responseText);
7 } else if ("city".equals(type)) {
8 result = Utility.handleCityResponse(responseText, selectProvince.getId());
9 } else if ("country".equals(type)) {
10 result = Utility.handleCountyResponse(responseText, selectCity.getId());
11 }
12 if (result) {
13 getActivity().runOnUiThread(new Runnable() {
14 @Override
15 public void run() {
16 closeProgressDialog();
17 if ("province".equals(type)) {
18 queryProvinces();
19 } else if ("city".equals(type)) {
20 queryCities();
21 } else if ("country".equals(type)) {
22 queryCounties();
23 }
24 }
25 });
四 选择城市碎片背景
开发到了可以切换城市的时候,我发现点开切换城市的滑动菜单,背景只是一个白色的背景色,和天气页的bing每日一图简直完全不能比啊,所以想在选择城市的碎片中也添加一个背景。
1.修改布局
开始修改碎片布局的xml,原本是一个线性布局的LinearLayout,我模仿天气活动的布局,将其嵌套为一个帧布局 FrameLayout。因为在这个布局中,所有的控件都对其左上角。
然后就是一个imageView控件用来存放背景图,之后就是原本的LinearLayout布局了。
因为在xml中的imageview默认是不显示的,需要在代码中设置其属性为visible。
cityBackground = (ImageView)view.findViewById(R.id.choose_area_background);
cityBackground.setVisibility(View.VISIBLE);
所以在ImageView控件中,我给他起了个名字,方便在碎片中将其实例化并给他设置可见属性。
其次因为添加的背景图肯定不一定能适合全部的机型,所以将其比例放大以适合宽或者高,这样就可以保持比例的充满全屏了。
<ImageView
android:id="@+id/choose_area_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/ic_city_background3"
android:scaleType="centerCrop"/>
2.添加背景图片
首先我在网络上找到一张图,我开始将其放在了drawable中,然后在布局中调用这个图片,然后发现当我点击城市列表时,程序会奔溃,日志显示:
trying to draw too large(138078000bytes) bitmap: (即尝试添加太大的图片)
网上尝试了多种方法,如在碎片中引用而不是布局引用,或者将其变为500k图片,都不太成功。最后将图片文件放在了mipmap_xxhdpi文件夹中,再进行引用,就可以成功的显示出来了。
所以查询了drawable和mipmap的区别:
大体来说普通图片放drawable,icon图标放mipmap。而mipmap自适应缩放效果好。
放一个效果图: