Android天气开发填坑

一 数据库中的错误

开发使用的是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                     });
扫描二维码关注公众号,回复: 3604316 查看本文章

四 选择城市碎片背景

开发到了可以切换城市的时候,我发现点开切换城市的滑动菜单,背景只是一个白色的背景色,和天气页的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自适应缩放效果好。

放一个效果图:

猜你喜欢

转载自www.cnblogs.com/Mask-D/p/9646457.html
今日推荐