Android天气开发填坑

mac2022-06-30  93

一 数据库中的错误

开发使用的是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自适应缩放效果好。

放一个效果图:

 

转载于:https://www.cnblogs.com/Mask-D/p/9646457.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)