刚书撸完了,总结一下出现的问题,为其他进坑的朋友节省一下时间。当然了,初学android可能解决方法不是太好哈。
(1)《第一行代码(第2版)》出版至今已过了两年多。有些api无法使用了。
(2)书中使用的是android7.0,由于种种原因我使用的是android8.0。有些代码在7.0可以运行,在8.0无法运行。
(3)书中使用的是gradle2.x,我使用的是gradle3.x。语法发生变化。
在书的“3.6.1RecyclerView基本用法”中,需要在gradle中引入RecyclerView。
书中是这样引入的:
compile 'com.android.support:recyclerview-v7:24.2.1
compile是gradle2.x中的语法,在gradle3.x中被弃用,修改为implementation(ps:参考链接)。同时由于我使用的是android8.0,所以需要升级recyclerview的版本,修改为:
implementation 'com.android.support:recyclerview-v7:26.1.0-alpha1'
在书的“5.3.1发送标准广播”中,需要发送自定义广播并接受。
Intent intent = new Intent("com.android.broadcasttest.MY_BROADCAST");
//标准广播
sendBroadcast(intent);
android7.0可以这样发送自定义的广播,并且接受自定义的广播,android8.0中就不行了。
android8.0为了管理系统和节约电量特别针对广播和服务发送intent的方式启动做出的改变,也就是说广播和服务不能随意收intent了,要对广播和服务更精确的指向,所以在创建intent的时候,我们需要指定我们的广播和服务的包名加类名,为的就是精确。(ps:参考链接)。
Intent intent = new Intent("com.android.broadcasttest.MY_BROADCAST");
intent.setComponent(new ComponentName("com.android.broadcasttest",
"com.android.broadcasttest.MyBroadcastReceiver"));
//标准广播
sendBroadcast(intent);
在书的“6.4.1创建数据”中,需要使用adb查看android模拟器中SQLlite的表是否创建成功,总是说我“permission denied”,一直没弄成功,到现在也没弄成功,不过我觉得无所谓,反正我能查询出来不就行了?对吧。
解决方案:https://www.jianshu.com/p/7821b8e1b414
在书的“6.5.2配置LitePal”中,需要使用LitePal框架(ps:书的作者写的开源框架,牛逼!)查询数据库。
需要修改build.gradle,由于我使用的gradle3.x,需要将:
compile 'org.litepal.android:core:1.3.2'
修改为:
implementation 'org.litepal.android:core:1.3.2'
原因同2.2
在书的“8.2.1通知的基本用法”中,需要使用通知,由于android8.0中通知引入了渠道的概念,所以书中android7.0的通知代码无法使用了。如何修改,我参考的是书的作者的博客https://blog.csdn.net/guolin_blog/article/details/79854070。
书中使用的和风天气api是v5版本,新注册的用户无法使用了。
解决方案一:
继续使用老用户的v5api,虽然新注册的用户无法使用v5api,但是老用户还是可以使用的。
下面是我收集的老用户的和风天气v5api:
http://guolin.tech/api/weather?cityid=CN101130101&key=bc0418b57b2d4918819d3974ac1285d9
https://free-api.heweather.com/v5/weather?city=CN101091101&key=32d1c829ed7d483086f4f5b4d5947cef
http://guolin.tech/api/weather?cityid=CN101010100&key=fb0e22d7b17f4bd0947c2e0c0045093d
http://guolin.tech/api/weather?cityid=CN101240201&key=ba9079704cc44512bb3af201ef10af15
http://guolin.tech/api/weather?cityid=CN101270101&key=9618c9b7080b4638a16fca8687bf9a60
http://guolin.tech/api/weather?cityid=CN101010100&key=28c01281607a4a9b92195626fb49a4a1
http://guolin.tech/api/weather?cityid=CN101010100&key=f35f596dcb4749be8af6f71d3ef3f332
只需要使用后面的key即可。
解决方案二:
使用和风天气v6api,但是v6的数据结构与v5的数据结构不同,需要自己修改一下。网上有一篇讲解的,不过我找不到了。
(1)看书学习要学会取舍。在使用adb查看android模拟器SQLlite数据库时,一直无法查看。一下午时间基本都赖在这了,再给我一次机会我会直接放弃掉,现在回头想想就算弄成功了,也没什么意义。虽然说,攻克一个难题会有很大的提升,在解决问题的过程中也能学到很多,但是如果拿这时间继续向下学习,有时候收益更大。
(2)英语。有些问题中文搜索不到,真得google一下。我英语不行,在全英文页面,我只能选择右键“翻译成中文”,效率很低,翻译效果也略差。要学习英语