楠木軒

【科技早報】谷歌將Android 8.0命名為Oreo 投資者建議Uber與特斯拉合併

由 卯秀珍 釋出於 綜合

  谷歌正式宣佈將Android 8.0命名為Oreo

  北京時間8月22日凌晨,谷歌在紐約市召開發佈會,正式宣佈Android 8.0作業系統將被命名為“奧利奧”(Oreo)。另外,谷歌還在加州山景城公司總部發布了官方“奧利奧”超級英雄Bugdroid雕像。

  在宣佈Android 8.0命名後不久,谷歌Android工程副總裁戴夫·伯克(Dave Burke)透過Twitter訊息釋出了位山景城總部園區的官方雕像的照片。跟此前幾年有所不同的是,當時的Bugdroid雕像都是站在“美味點心”的旁邊或是頂上的,而今年的雕像則將奧利奧的主題整合到了人物中去。另外,這個Android超級英雄雕像的身旁四周還堆滿了奧利奧餅乾。

  谷歌還在紐約市和山景城釋出會上分發了成包的奧利奧餅乾,這些餅乾上都有標準的“奧利奧”Bugdroid形象,其奶油夾心是綠色的。

  投資者建議Uber與特斯拉合併 馬斯克任CEO

  北京時間8月21日晚間訊息,Uber早期投資者詹森·卡拉坎尼斯(Jason Calacanis)日前表示,Uber應與特斯拉合併,由特斯拉CEO埃隆·馬斯克(Elon Musk)兼任Uber CEO。

  卡拉坎尼斯認為,Uber與特斯拉合併後,Uber將可以獲得其迫切需要的自動駕駛技術,同時還能將特斯拉的業務拓展到更多市場。

  卡拉坎尼斯早在2009年就投資了Uber,他說:“如果兩家公司合併,新公司將戰勝當前交通服務流域的任何一家競爭對手。”

  Intel正式宣佈第八代酷睿處理器:首發15W低壓

  8月21日晚,Intel釋出了最新的第八代Core處理器,和之前預料的一樣,首發的是TDP為15W的低壓處理器,主要用於超極本上面。

  Intel率先在今天釋出的共有四款處理器,分別是Core i7-8650U、Core i7-8550U、Core i5-8350U、Core i5-8250U。這四款處理器均採用四核心八執行緒設計,根據之前的曝光,效能比7代提升50%左右。

  這四款處理器的具體架構名字叫做Kaby Lake Refresh,即使是i5也是採用四核八執行緒設計,不過由於TDP的限制,頻率方面基準均低於2GHz,不過最高Boost可以達到4.2GHz。

  Intel還表示桌面版的Coffee Lake處理器將於2017年四季度正式釋出,而基於10nm的Cannon Lake將於2018年第一季度到來。

  iPhone 8的人臉識別速度將達到百萬分之一秒級別

  根據來自韓國媒體《韓國先驅報》的最新訊息稱,三星目前正在為蘋果iPhone 8生產OLED顯示屏。而這塊螢幕所使用的面部識別系統,只需要百萬分之一秒的時間,就能完成整個識別過程。

  之前有訊息稱,蘋果將在iPhone 8上放棄一直都在使用的Touch ID指紋識別系統,並且用人臉識別功能來取代前者作為Apple Pay等服務身份識別的驗證方式。

  同時根據《華爾街日報》的訊息稱,iPhone 8的人臉識別系統還整合了紅外功能,因此即使在黑暗或光線比較弱的環境中,依然可以正常工作。

  三星官方自曝Note 8外型

  8月22日,有網友發現,三星網站的“臨時工”在官網放出了Note 8的渲染圖,並在隨後立即刪除。

  相比於上半年推出的Galaxy S8,Note 8要顯得更加方正一些,該機保留了18.5:9比例的全視曲面屏,S-Pen依舊會是這款手機的一大賣點。

  根據澳洲媒體Ausdroid帶來的三星Galaxy Note 8營銷手冊諜照顯示,Note 8的外形與此前洩露的渲染圖沒有什麼區別,6.3英寸QHD+解析度的全視曲面屏,背面則配有平行排列的雙攝像頭和後置指紋解鎖模組,具備IP68級防水防塵功能,支援虹膜識別和無線充電功能。

  配置上,Note8的雙攝像頭能帶來2x光學變焦功能,擁有F1.7的大光圈,支援光學防抖技術。此外,三星Note 8還將與Smart Switch軟體相容,以幫助使用者從舊手機中轉移照片、聯絡人和歌曲等檔案。


  在上一節一起了解了ListView的簡單使用,那麼本節繼續來學習與ListView有著千絲萬縷的Adapter。

  一、瞭解MVC模式

  在開始學習Adapter之前我們要來了解下這個MVC模式。說起MVC模式,估計很多同學已經或多或少聽說過,可能在前面的Java開發中也有所接觸。

  MVC全名是Model View Controller,是模型(model)、檢視(view)、控制器(controller)的縮寫。一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中。

  MVC各元件之間的關係如下圖所示,可以清楚的知道各層之間的聯絡。

  在Android開發中,比較流行的開發框架模式採用的是MVC框架模式,採用MVC模式的好處是便於UI介面部分的顯示和業務邏輯,資料處理分開。那麼Android專案中哪些程式碼來充當M、V、C角色呢?

  Android 鼓勵弱耦合和元件的重用,Android 中MVC的具體體現如下:

  模型(model):是應用程式的主題部分,所有的業務邏輯都應在該層(對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對計算等操作也是必須放在該層的)。

  檢視層(view):是應用程式中負責生成使用者介面的部分。也是整個MVC架構中使用者唯一可以看到的一層,接收使用者的輸入,顯示使用者的處理結果。一般用XML檔案進行介面的描述,使用的時候可以非常方便的引入。

  控制層(controller):是根據使用者的輸入,控制使用者介面資料顯示及更新model物件狀態的部分。Android的控制層的重任通常落在了眾多Activity的肩上,這句話也就暗含了不要在Activity中寫過多程式碼,要透過Activity交給model業務邏輯處理層處理,這樣做的另外一個原因是Android中的Activity的響應時間是5秒,如果耗時的操作放在這裡,程式很容易無響應。

  在MVC模式中其實控制器Activity主要是起到解耦作用,將View檢視和Model模型分離,雖然Activity起到互動作用,但是一般在Activity中有很多關於檢視UI的顯示程式碼,因此View檢視和Activity控制器並不是完全分離的,也就是說一部分View檢視和Contronller控制器Activity是繫結在一個類中的。

  使用MVC模式的優點:

  耦合性低。所謂耦合性就是模組程式碼之間的關聯程度。利用MVC框架使得View(檢視)層和Model(模型)層可以很好的分離,這樣就達到了解耦的目的,所以耦合性低,減少模組程式碼之間的相互影響。

  可擴充套件性好。由於耦合性低,新增需求,擴充套件程式碼就可以減少修改之前的程式碼,降低bug的出現率。

  模組職責劃分明確。主要劃分層M、V、C三個模組,利於程式碼的維護。

  什麼時候適合使用MVC設計模式?當然一個小的專案且無需頻繁修改需求就不用MVC框架來設計了,那樣反而覺得程式碼過度設計,程式碼臃腫。一般在大型專案中,且業務邏輯處理複雜,頁面顯示比較多,需要模組化設計的專案使用MVC就有足夠的優勢了。

  二、Adapter概述

  Adapter是連線後端資料和前端顯示的介面卡介面,是資料和UI(View)之間一個重要的紐帶。在常見的View(ListView、GridView)等地方都需要用到Adapter。

  Android的介面卡負責為列表元件提供資料來源,也負責將單獨的資料元素轉換為顯示在列表元件中的特定檢視,如ListView的介面卡關係如下圖所示。

  Adapter本身只是一個介面,它派生了 ListAdapter和SpinnerAdapter兩個子介面,其中 ListAdapter 為 AbsListView 提供列表項,而 SpinnerAdapter 為 AbsSpinner 提供列表項。Adapter介面及其實現類的繼承關係圖如下圖所示。

  上圖中標紅粗線框標出的是比較常用的Adapter。從圖中可以看出幾乎所有的Adapter都繼承了 BaseAdapter,而BaseAdapter同時實現了 ListAdapter、SpinnerAdapter 兩個介面,因此 BaseAdapter 及其子類可以同時為 AbsListView、AbsSpinner提供列表項。

  Adapter的幾個常用實現類如下。

  ArrayAdapter:簡單、易用的Adapter,通常用於將陣列或List集合的多個值包裝成多個列表項。

  SimpleAdapter:並不簡單、功能強大的Adapter,可用於將List集合的多個物件包裝成多個列表項。

  SimpleCursorAdapter:與SimpleAdapter基本相似,只是用於包裝Cursor提供的資料。

  BaseAdapter:通常用於被擴充套件,擴充套件BaseAdapter可以對各列表項進行最大限度的定製。

  那麼本節先透過一個示例學習如何使用ArrayAdapter建立ListView,關於SimpleAdapter和BaseAdapter會在後續幾期進行學習,而SimpleCursorAdapter會在資料庫部分進行學習。

  三、ArrayAdapter示例

  繼續使用WidgetSample工程的listviewsample模組,在app/main/res/layout/目錄下建立arrayadapter_layout.xml檔案,在其中填充如下程式碼片段:

  接下來為ListView提供Adapter,Adapter決定了ListView所要顯示的列表項。在java包下建立ArrayAdapterActivity.java檔案,載入上面新建的佈局檔案,具體程式碼如下:

  上面的程式中前面兩行粗體程式碼建立了一個ArrayAdapter,建立ArrayAdapter時必須指定如下三個引數。

  context:要使用的上下文環境,幾乎建立所有元件都需要傳入Context物件。

  resource: 要使用的檢視資源 ID,該檢視將作為ArrayAdapter的列表項元件。這裡使用了Android系統中自帶的檢視資源,系統預定義的檢視資源主要有以下幾種:

  android.R.layout.simple_list_item_1: 單獨一行的文字框。

  android.R.layout.simple_list_item_2: 兩個文字框組成。

  android.R.layout.simple_list_item_checked: 每項都是由一個已選中的列表項。

  android.R.layout.simple_list_item_multiple_choice: 都帶有一個複選框。

  android.R.layout.simple_list_item_single_choice: 都帶有一個單選鈕。

  objects:要實際顯示的陣列或List,將負責為多個列表項提供資料。 該陣列或List包含多少個元素,就將生成多少個列表項。

  上面的程式中後面幾行粗體程式碼為ListView列表項新增點選事件監聽器,當用戶點選某列表項的時候,就會收到onItemClick事件,然後做訊息提示或者其他需要的處理。

  修改啟動的Activity,然後執行程式,可以看到下圖左側所示列表介面。

  點選列表中的某一項的時候,會彈出訊息提示,如上圖右側所示。

  關於Adapter的簡單瞭解先到這裡,其他更復雜的Adapter使用後面陸續學習。

  今天就先到這裡,如果有問題歡迎留言一起探討,共同成長!

  此文章版權為今日頭條號分享達人就是我——鑫鱻所有,若需轉載請聯絡作者授權,特此宣告!

  往期總結分享:

  第1節:Android的前世今生

  第2節:Android 系統架構和應用元件那些事

  第3節:帶你一起來聊一聊Android開發環境

  第4節:正確安裝和配置JDK

  第5節:善用ADT Bundle

  第6節:配置最佳化SDK Manager

  第7節:搞定Android模擬器

  第8節:HelloWorld,第一趟旅程出發點

  第9節:Android實戰,不懂程式碼也可以開發

  第10節:開發IDE迎來Android Studio

  第11節:執行Android Studio工程

  第12節:熟悉Android Studio介面

  第13節:Android Studio配置最佳化

  第14節:使用高速Genymotion

  第15節:掌握Android Studio專案結構

  第16節:Android使用者介面開發概述

  第17節:TextView屬性和方法大全

  第18節:EditText的屬性和使用方法

  第19節:Button使用詳解

  第20節:CheckBox和RadioButton使用大全

  第21節:ToggleButton和Switch使用大全

  第22節:ImageView的屬性和方法大全

  第23節:ImageButton和ZoomButton使用

  第24節:自定義View簡單使用

  第25節:簡單且最常用的LinearLayout

  第26節:layout_gravity和gravity大不同

  第27節:正確使用padding和margin

  第28節:輕鬆掌握RelativeLayout相對佈局

  第29節:善用TableLayout表格佈局

  第30節:兩分鐘掌握FrameLayout幀佈局

  第31節:少用的AbsoluteLayout絕對佈局

  第32節:新推出的GridLayout網格佈局

  第33節: Android事件處理概述

  第34節:Android中基於監聽的事件處理

  第35節:Android中基於回撥的事件處理

  第36節:Android系統事件的處理

  第37節:初識ListView

  (2017-08-18)


  透過對Android基本元件的學習,也有接觸少部分Android的事件處理,比如按鈕的點選事件、選框的狀態切換事件。

  一、Android事件處理

  Android提供了兩種方式的事件處理:基於回撥的事件處理和基於監聽的事件處理。

  基於監聽的事件處理:主要做法就是為Android介面元件繫結特定的事件監聽器,前面小節已經見到大量這種事件處理的示例。

  基於回撥的事件處理:主要做法就是重寫Android元件特定的回撥方法, 或者重寫Activity的回撥方法。Android為絕大部分介面元件都提供了事件響應的回撥方法,開發者只要重寫它們即可。

  一般來說,基於回撥的事件處理可用於處理一些具有通用性的事件,基於回撥的事件處理程式碼會顯得比較簡潔。但對於某些特定的事件,無法使用基於回撥的事件處理,只能採用基於監聽的事件處理。

  本期先來學習基於監聽的事件處理,後面再學習基於回撥的事件處理,關注分享達人秀獲取第一手教程,也可以加小編好友拽入Android零基礎入門技術討論微信群共同進步。

  二、基於監聽的事件處理概述

  基於監聽的事件處理是一種更“面向物件”的事件處理,在事件監聽的處理模型中主要涉及如下三類物件。

  Event Source (事件源):事件發生的場所,通常就是各個元件,例如按鈕、視窗、選單等。

  Event (事件):事件封裝了介面元件上發生的特定事情(通常就是一次使用者操作)。如果程式需要獲得介面元件上所發生事件的相關資訊,一般透過Event物件來取得。

  Event Listener (事件監聽器):負責監聽事件源所發生的事件,並對各種事件做出相應的響應。

  當用戶按下一個按鈕或者單擊某個選單項時,這些動作就會激發一個相應的事件,該事件就會觸發事件源上註冊的事件監聽器(特殊的Java物件),事件監聽器呼叫對應的事件處理器 (事件監聽器裡的例項方法)來做出相應的響應。

  每個元件均可以針對特定的事件指定一個事件監聽器,每個事件監聽器也可監聽一個或多個事件源。因為同一個事件源上可能發生多種事件,委派式事件處理方式可以把事件源上所有可能發生的事件分別授權給不同的事件監聽器來處理;同時也可以讓一類事件都使用同一個事件監聽器來處理。

  Android事件處理流程如下圖所示:

  從上圖可以知道,基於監聽的事件處理模型的流程如下:

  為某個事件源(介面元件)設定一個監聽器,用於監聽使用者操作。

  當用戶操作時,會觸發事件源的監聽器。

  生成了對應的事件物件。

  將這個事件源物件作為引數傳給事件監聽器。

  事件監聽器對事件物件進行判斷,執行對應的事件處理器(對應事件的處理方法)。

  Android中基於監聽的事件處理模型的開發步驟如下。

  獲取普通介面元件(事件源),也就是被監聽的物件。

  實現事件監聽器類,該監聽器類是一個特殊的Java類,必須實現一個XxxListener介面。

  呼叫事件源的setXxxListener方法將事件監聽器物件註冊給普通元件(事件源)。

  對於這三件事情,事件源可以是任何介面元件,不太需要開發者參與;註冊監聽器也只要一行程式碼即可,因此事件程式設計的關鍵就是實現事件監聽器類。

  在基於監聽的事件處理模型中,事件監聽器必須實現事件監聽器介面,Android為不同的介面元件提供了不同的監聽器介面,這些介面通常以內部類的形式存在。以View類為例,它包含了如下幾個內部介面。

  View.OnClickListener:單擊事件的事件監聽器必須實現的介面。

  View.OnCreateContextMenu Listener :建立上下文選單事件的事件監聽器必須實現的介面。

  View.onFocusChangeListener:焦點改變事件的事件監聽器必須實現的介面。

  View.OnKeyListener:按鍵事件的事件監聽器必須實現的介面。

  View.OnLongClickListener:長按事件的事件監聽器必須實現的介面。

  View.OnTouchListener:觸控事件的事件監聽器必須實現的介面。

  透過前面的學習,知道事件監聽器就是實現了特定介面的Java類的例項。在程式中實現事件監聽器,通常有如下幾種形式。

  匿名內部類形式:使用匿名內部類建立事件監聽器物件。

  內部類形式:將事件監聽器類定義成當前類的內部類。

  外部類形式:將事件監聽器類定義成一個外部類。

  Activity本身作為事件監聽器類:讓Activity本身實現監聽器介面,並實現事件處理方法。

  直接繫結到標籤形式:直接在xml佈局檔案對應的Activity中定義一個事件處理方法,然後在佈局檔案中引用要觸發的事件。

  三、使用匿名內部類作為事件監聽器

  大部分時候,事件處理器都沒有什麼複用價值(可複用程式碼通常都被抽象成了業務邏輯方法),因此大部分事件監聽器只是臨時使用一次,所以使用匿名內部類形式的事件監聽器更合適。實際上,這種形式是目前使用最廣泛的事件監聽器形式,在前面的基本元件學習中也是使用的該種方法來繫結監聽器。

  接下來透過一個簡單的示例程式來學習Android使用匿名內部類作為事件監聽器。

  同樣使用WidgetSample工程,繼續使用app/main/res/layout/目錄下的activity_main.xml檔案,在其中填充如下程式碼片段:

  為了監聽按鈕的點選事件,在Java程式碼中為其新增點選事件監聽器,具體程式碼如下:

  上面程式中的粗體字部分使用匿名內部類建立了一個事件監聽器物件,“new監聽器介面”或“new事件介面卡”的形式就是用於建立匿名內部類形式的事件監聽器。

  執行程式,點選按鈕,可以看到下圖所示介面效果。

  對於使用匿名內部類作為事件監聽器類的形式來說,唯一的缺點就是匿名內部類的語法有點不易掌握,如果Java基礎紮實,匿名內部類的語法掌握較好,通常建議使用匿名內部類作為監聽器類。

  Android中基於監聽的事件處理的其他四種形式下期再繼續學習。

  今天就先到這裡,如果有問題歡迎留言一起探討,共同成長!

  此文章版權為今日頭條號分享達人就是我——鑫鱻所有,若需轉載請聯絡作者授權,特此宣告!

  往期總結分享:

  第1節:Android的前世今生

  第2節:Android 系統架構和應用元件那些事

  第3節:帶你一起來聊一聊Android開發環境

  第4節:正確安裝和配置JDK

  第5節:善用ADT Bundle

  第6節:配置最佳化SDK Manager

  第7節:搞定Android模擬器

  第8節:HelloWorld,第一趟旅程出發點

  第9節:Android實戰,不懂程式碼也可以開發

  第10節:開發IDE迎來Android Studio

  第11節:執行Android Studio工程

  第12節:熟悉Android Studio介面

  第13節:Android Studio配置最佳化

  第14節:使用高速Genymotion

  第15節:掌握Android Studio專案結構

  第16節:Android使用者介面開發概述

  第17節:TextView屬性和方法大全

  第18節:EditText的屬性和使用方法

  第19節:Button使用詳解

  第20節:CheckBox和RadioButton使用大全

  第21節:ToggleButton和Switch使用大全

  第22節:ImageView的屬性和方法大全

  第23節:ImageButton和ZoomButton使用

  第24節:自定義View簡單使用

  第25節:簡單且最常用的LinearLayout

  第26節:layout_gravity和gravity大不同

  第27節:正確使用padding和margin

  第28節:輕鬆掌握RelativeLayout相對佈局

  第29節:善用TableLayout表格佈局

  第30節:兩分鐘掌握FrameLayout幀佈局

  第31節:少用的AbsoluteLayout絕對佈局

  第32節:新推出的GridLayout網格佈局

  (2017-08-13)


  Android 8.0將會在8月上旬釋出,而Google將會優先讓自家Pixel及Nexus手機更新,而向來對於軟體更新積極的Sony Mobile ,也很可能會在2017 IFA登場的Xperia新機預載Android 8.0作業系統。

  Sony旗下可升級的手機名單有Xperia XZ Premium、Xperia XZS、Xperia XA1 Ultra、Xperia XA1、Xperia XZ、Xperia X Compact、Xperia X Performance、Xperia X,雖然名單內沒有出現Xperia Z5系列,不過這也並非是Sony Moible正式對外公告,僅供參考。暫時還有有國產手機的訊息,有訊息,第一時間通知大家。

  (2017-08-07)


  之前一直在百度閱讀維護的書 《愛上Android》,已經由人民郵電出版社出版。起這個書名的主要原因是我非常喜愛從事開發Android程式的事業,也非常熱愛分享技術。

  心理專家研究過人心理週期的變化,結論證實大部分人連續、專注的幹一件事的時間很難超過18個月。當你能堅持一件事做18個月的時候證明你至少戰勝了百分之九十的人。

  很慶幸的是,我成為了剩餘百分之十的人,堅持了兩年去完成這一本書。

  在此期間,我的角色也升級成了一位父親,我真的非常感謝我的妻子。寫書過程中佔用了很多本應是陪伴她的時間,但她毫無怨言,一直都在默默地支援我,才使得我能專心的投入我的工作以及寫作中。可以毫不誇張的說,沒有我妻子就沒有這本書的面世。

  本書主要特色

  1.堅持更新知識點

  網際網路技術發展一日千里。寫作的同時Android版本也在更新,兩年期間,Android 從6.0 預覽版到 8.0 預覽版。

  為了保證知識不過期,寫過的知識點我反覆更新了好幾個版本,甚至開始印刷前都在更新——今年5月底,Google官方認可 Kotlin 開發 Android,當時書也馬上開始印刷,我第一時間聯絡出版社,專門加了一節使用 Kotlin 開發 Android。

  不僅限於知識點更新,包括一些細節,比如封皮設計都仔細推敲:

  Android Studio 預覽版圖示顏色換了,不再是正式的安卓綠,而變成了醒目的黃色。預覽版的顏色更加能體現知識點迭代,為此我專門和出版社編輯溝通,把本書的封皮換成相近的顏色。

  2.錄製影片

  我一直認為看書學習的效率要比看影片快,但是剛入門的時候,看影片更加直觀一些。

  為了滿足新手希望能快捷、方便入門的心理,我專門針對剛開始的幾章錄製了幾十段影片。為了保證影片的錄製質量,專門高價購買了外接音效卡和話筒。

  影片絕不是照著書裡的文字念,而是把寫程式碼的技巧、過程、思路都展現出來。

  每錄製一段十幾分鐘的影片,我都需要花費將近一天的時間去準備,錄製效果差強人意的直接刪掉,重新進行錄製。

  本書主要內容

  書裡的基本內容主要包括,開發環境搭建,介面搭建,Activity知識,資料儲存,網路程式設計,圖片處理,複雜控制元件,Fragment,廣播接受者,服務,動畫。除了這些還介紹了開發必不可少的技能,包括螢幕適配,效能最佳化,自定義控制元件和NDK程式設計。 最後一章透過一個完整的新聞客戶端專案整合了前面的知識點。

  這絕不是一本中庸的書,裡面每個知識點都強調實用二字

  撰寫這本書的過程中,我傾盡了我的熱情與腦力,對每個知識點都深入剖析,既沒有盲目羅列一大段程式碼留給讀者自己慢慢看的情況,也不會出現把所有的知識點都堆到一起讓讀者自行領會的消極態度,而是循序漸進的講述開發過程中必備的知識點,使讀者能在將來的實際開發過程中運用到很多。

  預售

  現在《愛上Android》已經在京東預售,歡迎購買。地址:

  京東-愛上Android http://item.jd.com/12144527.html

  試讀-愛上Android http://www.epubit.com.cn/book/details/4885

  說實在話,寫書真不是為了賺錢,尤其是技術性書籍,寫這本書還是希望自己能夠幫助到一些人。

  大家看了這本書之後,要是覺得寫得好,可以幫忙宣傳宣傳;要是覺得寫的不好,在部落格或者公眾號裡留言,請指出不足之處,我會努力改正。

  謝謝大家!

  (2017-08-03)