《第一行代碼(第2版)》中碰到的問題

1.簡介

剛書擼完了,總結一下出現的問題,爲其他進坑的朋友節省一下時間。當然了,初學android可能解決方法不是太好哈。

(1)《第一行代碼(第2版)》出版至今已過了兩年多。有些api無法使用了。

(2)書中使用的是android7.0,由於種種原因我使用的是android8.0。有些代碼在7.0可以運行,在8.0無法運行。

(3)書中使用的是gradle2.x,我使用的是gradle3.x。語法發生變化。

2.問題

2.1 “第3章 軟件也要拼臉蛋——UI開發的點點滴滴”

在書的“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'

2.2 “第5章 全局大喇叭——詳解廣播機制

在書的“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);

2.3 “第6章 數據存儲全方案——詳解持久化技術”

在書的“6.4.1創建數據”中,需要使用adb查看android模擬器中SQLlite的表是否創建成功,總是說我“permission denied”,一直沒弄成功,到現在也沒弄成功,不過我覺得無所謂,反正我能查詢出來不就行了?對吧。

2.4 “第6章 數據存儲全方案——詳解持久化技術”

在書的“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

2.5 “第8章 豐富你的程序——運用手機多媒體”

在書的“8.2.1通知的基本用法​​​​​​​”中,需要使用通知,由於android8.0中通知引入了渠道的概念,所以書中android7.0的通知代碼無法使用了。如何修改,我參考的是書的作者的博客https://blog.csdn.net/guolin_blog/article/details/79854070

2.6 “第14章 進入實戰——開發酷歐天氣”

書中使用的和風天氣apiv5版本,新註冊的用戶無法使用了。

解決方案一:

繼續使用老用戶的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的數據結構不同,需要自己修改一下。網上有一篇講解的,不過我找不到了。

3.總結

(1)看書學習要學會取捨。在使用adb查看android模擬器SQLlite數據庫時,一直無法查看。一下午時間基本都賴在這了,再給我一次機會我會直接放棄掉,現在回頭想想就算弄成功了,也沒什麼意義。雖然說,攻克一個難題會有很大的提升,在解決問題的過程中也能學到很多,但是如果拿這時間繼續向下學習,有時候收益更大。

(2)英語。有些問題中文搜索不到,真得google一下。我英語不行,在全英文頁面,我只能選擇右鍵“翻譯成中文”,效率很低,翻譯效果也略差。要學習英語

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章