1+x安卓應(yīng)用開(kāi)發(fā)(中級(jí))課程-項(xiàng)目5 主流框架的應(yīng)用_第1頁(yè)
1+x安卓應(yīng)用開(kāi)發(fā)(中級(jí))課程-項(xiàng)目5 主流框架的應(yīng)用_第2頁(yè)
1+x安卓應(yīng)用開(kāi)發(fā)(中級(jí))課程-項(xiàng)目5 主流框架的應(yīng)用_第3頁(yè)
1+x安卓應(yīng)用開(kāi)發(fā)(中級(jí))課程-項(xiàng)目5 主流框架的應(yīng)用_第4頁(yè)
1+x安卓應(yīng)用開(kāi)發(fā)(中級(jí))課程-項(xiàng)目5 主流框架的應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《騰訊1+x安卓應(yīng)用開(kāi)發(fā)(中級(jí))》教案

一、教案設(shè)計(jì)課題項(xiàng)目5任務(wù)1網(wǎng)絡(luò)框架的使用課型理論課理論課時(shí)2課時(shí)實(shí)踐課時(shí)2課時(shí)教學(xué)目標(biāo)知識(shí)目標(biāo)能力(技能)目標(biāo)熟悉常用的網(wǎng)絡(luò)框架原理。熟悉常用的網(wǎng)絡(luò)框架的實(shí)現(xiàn)。教學(xué)重點(diǎn)網(wǎng)絡(luò)框架的使用。教學(xué)難點(diǎn)理解不同網(wǎng)絡(luò)框架的適用場(chǎng)景。教學(xué)內(nèi)容1.Android常用網(wǎng)絡(luò)框架包括okhttp、retrofit、volley等。(1)okhttpokhttp是Square公司開(kāi)源的一款網(wǎng)絡(luò)框架,封裝了一個(gè)高性能的http請(qǐng)求庫(kù)。支持spdy、http2.0、websocket等協(xié)議,支持同步、異步請(qǐng)求,封裝了線程池,封裝了數(shù)據(jù)轉(zhuǎn)換,能有效提高性能。okhttp處理了很多網(wǎng)絡(luò)疑難雜癥:會(huì)從很多常用的連接問(wèn)題中自動(dòng)恢復(fù);如果您的服務(wù)器配置了多個(gè)IP地址,當(dāng)?shù)谝粋€(gè)IP連接失敗的時(shí)候,okhttp會(huì)自動(dòng)嘗試下一個(gè)IP;okhttp還處理了代理服務(wù)器問(wèn)題和SSL握手失敗問(wèn)題。okhttp的github地址:/square/okhttp。(2)retrofitretrofit是基于okhttp封裝的網(wǎng)絡(luò)請(qǐng)求框架,網(wǎng)絡(luò)請(qǐng)求的工作本質(zhì)上由okhttp完成,而retrofit僅負(fù)責(zé)網(wǎng)絡(luò)請(qǐng)求接口的封裝。retrofit的接口層封裝了請(qǐng)求參數(shù),header,url等信息,之后由okhttp完成后續(xù)的請(qǐng)求工作。在服務(wù)端返回?cái)?shù)據(jù)后,okhttp將原始的結(jié)果傳遞給retrofit,retrofit根據(jù)客戶端的相關(guān)配置,將結(jié)果解析后回調(diào)給客戶端。retrofit的github地址:/square/retrofit。(3)volleyvolley是在2013年的Google大會(huì)上發(fā)布的一款A(yù)ndroid平臺(tái)網(wǎng)絡(luò)通信庫(kù),具有網(wǎng)絡(luò)請(qǐng)求的處理、小圖片的異步加載和緩存等功能,能夠幫助AndroidAPP更方便地執(zhí)行網(wǎng)絡(luò)操作,而且更快速高效。適合數(shù)據(jù)量不大但是通信頻繁的場(chǎng)景,缺點(diǎn)是不能下載文件。volley的github地址:/google/volley。2.Volley基本用法(1)Volley網(wǎng)絡(luò)請(qǐng)求隊(duì)列Volley請(qǐng)求網(wǎng)絡(luò)是基于請(qǐng)求隊(duì)列的,開(kāi)發(fā)者只要把請(qǐng)求放在請(qǐng)求隊(duì)列中,請(qǐng)求隊(duì)列會(huì)依次進(jìn)行請(qǐng)求。如果網(wǎng)絡(luò)請(qǐng)求不頻繁,一個(gè)應(yīng)用程序只要一個(gè)隊(duì)列就可以了,如果請(qǐng)求比較頻繁,可以一個(gè)Activity對(duì)應(yīng)一個(gè)隊(duì)列。創(chuàng)建隊(duì)列的代碼如下所示:RequestQueuemRequestQueue=Volley.newRequestQueue(getApplicationContext());(2)StringRequest的用法StringRequest請(qǐng)求返回的數(shù)據(jù)是String類型的。為了發(fā)出一條HTTP請(qǐng)求,我們需要?jiǎng)?chuàng)建一個(gè)StringRequest對(duì)象,StringRequest構(gòu)造方法有四個(gè)參數(shù),如下所示:StringRequest(intmethod,Stringurl,Listener<String>listener,ErrorListenererrorListener)表8-1StringRequest構(gòu)造方法參數(shù)參數(shù)說(shuō)明method用來(lái)設(shè)置GET或POST請(qǐng)求url用來(lái)設(shè)置請(qǐng)求的地址listener用來(lái)設(shè)置請(qǐng)求成功時(shí)的回調(diào)errorListener用來(lái)設(shè)置請(qǐng)求失敗時(shí)的回調(diào)最后,需要將這個(gè)StringRequest對(duì)象添加到RequestQueue,如下所示:mRequestQueue.add(stringRequest);(3)JsonObjectRequest的用法JsonObjectRequest請(qǐng)求返回的是JSON格式的數(shù)據(jù)。為了發(fā)出一條HTTP請(qǐng)求,我們需要?jiǎng)?chuàng)建一個(gè)JsonObjectRequest對(duì)象,JsonObjectRequest構(gòu)造方法有五個(gè)參數(shù),如下所示:JsonObjectRequest(intmethod,Stringurl,JSONObjectjsonRequest,Listener<JSONObject>listener,ErrorListenererrorListener)表8-2JsonObjectRequest構(gòu)造方法參數(shù)參數(shù)說(shuō)明method用來(lái)設(shè)置GET或POST請(qǐng)求url用來(lái)設(shè)置請(qǐng)求的地址jsonRequest發(fā)出POST請(qǐng)求時(shí)的請(qǐng)求體listener用來(lái)設(shè)置請(qǐng)求成功時(shí)的回調(diào)errorListener用來(lái)設(shè)置請(qǐng)求失敗時(shí)的回調(diào)最后,需要將這個(gè)JsonObjectRequest對(duì)象添加到RequestQueue,如下所示:mRequestQueue.add(jsonObjectRequest);(4)ImageRequest的用法ImageRequest用來(lái)加載圖片。為了發(fā)出一條HTTP請(qǐng)求,我們需要?jiǎng)?chuàng)建一個(gè)ImageRequest對(duì)象,ImageRequest構(gòu)造方法有七個(gè)參數(shù),如下所示:ImageRequest(Stringurl,Response.Listener<Bitmap>listener,intmaxWidth,intmaxHeight,ScaleTypescaleType,ConfigdecodeConfig,esponse.ErrorListenererrorListener)表8-3ImageRequest構(gòu)造方法參數(shù)參數(shù)說(shuō)明url用來(lái)設(shè)置請(qǐng)求的地址listener用來(lái)設(shè)置請(qǐng)求成功時(shí)的回調(diào)maxWidth圖片的最大寬度maxHeight圖片的最大高度scaleType圖片的縮放類型decodeConfig顏色設(shè)置errorListener用來(lái)設(shè)置請(qǐng)求失敗時(shí)的回調(diào)最后,需要將這個(gè)ImageRequest對(duì)象添加到RequestQueue,如下所示:mRequestQueue.add(imageRequest);教學(xué)準(zhǔn)備教材,PPT、教綱、教案參考資料/square/okhttp,/square/retrofit,/google/volley教學(xué)過(guò)程方法與手段教學(xué)備注【課堂導(dǎo)入】為什么要學(xué)習(xí)網(wǎng)絡(luò)框架?因?yàn)榇蠖鄶?shù)應(yīng)用程序都需要連接網(wǎng)絡(luò),從服務(wù)器獲取數(shù)據(jù),或者發(fā)送數(shù)據(jù)給服務(wù)器。在Android中進(jìn)行網(wǎng)絡(luò)連接通常使用Scoket和HTTP,HTTP使用較多。HTTP請(qǐng)求可以采用原生的HttpUrlConnection,也可以采用一些成熟的網(wǎng)絡(luò)框架。采用網(wǎng)絡(luò)框架能提高開(kāi)發(fā)效率。本任務(wù)我們將解決如何利用Volley框架的GET請(qǐng)求獲取服務(wù)返回的數(shù)據(jù)的問(wèn)題。【教學(xué)實(shí)施】8.1.1任務(wù)描述利用Volley框架的GET請(qǐng)求獲取服務(wù)器返回的String類型的數(shù)據(jù)、json格式的數(shù)據(jù)和圖片。如圖所示。8.1.2問(wèn)題引導(dǎo)為什么要學(xué)習(xí)網(wǎng)絡(luò)框架?因?yàn)榇蠖鄶?shù)應(yīng)用程序都需要連接網(wǎng)絡(luò),從服務(wù)器獲取數(shù)據(jù),或者發(fā)送數(shù)據(jù)給服務(wù)器。在Android中進(jìn)行網(wǎng)絡(luò)連接通常使用Scoket和HTTP,HTTP使用較多。HTTP請(qǐng)求可以采用原生的HttpUrlConnection,也可以采用一些成熟的網(wǎng)絡(luò)框架。采用網(wǎng)絡(luò)框架能提高開(kāi)發(fā)效率。本任務(wù)我們將解決如何利用Volley框架的GET請(qǐng)求獲取服務(wù)返回的數(shù)據(jù)的問(wèn)題。8.1.3知識(shí)準(zhǔn)備Android常用網(wǎng)絡(luò)框架介紹Volley基本用法Volley網(wǎng)絡(luò)請(qǐng)求隊(duì)列StringRequest的用法JsonObjectRequest的用法ImageRequest的用法8.1.4完成利用Volley框架的GET請(qǐng)求獲取服務(wù)器返回的String類型的數(shù)據(jù)、json格式的數(shù)據(jù)和圖片8.1.5知識(shí)拓展Volley框架請(qǐng)求JsonArray類型的數(shù)據(jù)Volley框架使用ImageLoader加載圖片【知識(shí)(技能)鞏固練習(xí)】使用網(wǎng)絡(luò)框架加載本校官網(wǎng)首頁(yè)源代碼。【教學(xué)小結(jié)】講授、演示課后作業(yè)與訓(xùn)練完成項(xiàng)目5課后練習(xí)對(duì)應(yīng)的習(xí)題。教學(xué)反思課題項(xiàng)目5任務(wù)2圖片處理框架的使用課型理論課理論課時(shí)2課時(shí)實(shí)踐課時(shí)2課時(shí)教學(xué)目標(biāo)知識(shí)目標(biāo)能力(技能)目標(biāo)熟悉常用的圖片處理框架原理。熟悉常用的圖片處理框架的實(shí)現(xiàn)。教學(xué)重點(diǎn)圖片處理框架的使用。教學(xué)難點(diǎn)理解不同圖片處理框架的特點(diǎn)。教學(xué)內(nèi)容1.Android常用圖片框架簡(jiǎn)介Android常用圖片框架包括Picasso、Glide、Fresco等。Picasso由Square公司出品,Glide由BumpTechnologies開(kāi)發(fā),F(xiàn)resco由Facebook開(kāi)發(fā)。Fresco支持gif,圖片加載效率高,支持圖片從模糊到清晰的漸進(jìn)式加載,圖片可以以任意的中心點(diǎn)顯示在ImageView上,采用了類似GC的引用計(jì)數(shù)機(jī)制,使那些不再使用的圖片對(duì)象可以更早地被回收,降低內(nèi)存的開(kāi)銷。但包很大,API不夠簡(jiǎn)潔,用法復(fù)雜。Picasso比Glide更加簡(jiǎn)潔和輕量,Glide比Picasso功能更為豐富。第一次加載圖片時(shí),Picasso會(huì)比Glide快,而當(dāng)緩存中已經(jīng)有下載好的圖片時(shí),Glide的緩存機(jī)制會(huì)使Glide顯示圖片比Picasso快。此外,Glide支持gif,Picasso不支持gif。Glide的bitmap默認(rèn)的格式是RGB_565,但是Picasso用的是ARGB_8888,所以Glide圖片質(zhì)量上不如Picasso,但是Glide的內(nèi)存消耗只占Picasso一半。這里我們主要介紹Glide框架的使用。2.Glide框架的使用使用Glide框架使得我們可以在Android平臺(tái)上以非常簡(jiǎn)單的方式加載和展示圖片。(1)圖片的加載Glide框架允許我們從不同途徑加載圖片。示例如下://從網(wǎng)絡(luò)加載圖片Glide.with(context).load("/d/file/20180627/201708101544375040327.png").into(imageView);.with()接收的參數(shù)是可以是Context、Activity、Fragment、FragmentActivity、ApplicationContext中的任何一個(gè),.load()是核心的請(qǐng)求方法,以上代碼表示對(duì)指定的地址進(jìn)行網(wǎng)絡(luò)請(qǐng)求,.into()指定將圖片顯示在哪個(gè)ImageView控件中。以下三個(gè)代碼片段分別展示了三種加載圖片的方式。//通過(guò)本地文件加載圖片F(xiàn)ilefile=newFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"test.jpg");Glide.with(context).load(file).into(imageView);//通過(guò)資源id加載圖片intresourceId=R.drawable.test;Glide.with(context).load(resourceId).into(imageView);//通過(guò)二進(jìn)制流加載圖片byte[]image=getImageBytes();Glide.with(this).load(image).into(imageView);在加載圖片的過(guò)程中,可以設(shè)置圖片未加載完畢時(shí)默認(rèn)顯示的圖片,還可以設(shè)置圖片加載失敗時(shí)顯示的圖片。代碼如下:Glide.with(context).load(url).placeholder(R.drawable.pic1)//圖片未加載完畢時(shí)默認(rèn)顯示的圖片.error(R.drawable.pic2).into(imageViewGif);//圖片加載失敗時(shí)顯示的圖片//圖片預(yù)加載Glide.with(context).load(url).preload()(2)對(duì)圖片的處理以下三個(gè)代碼片段分別展示了如何實(shí)現(xiàn)“調(diào)整圖片大小”、“設(shè)置縮略圖”和“對(duì)圖片做圓形化處理”。//調(diào)整圖片的大小Glide.with(context).load(url).override(300,200)//調(diào)整圖片的寬高為300*200.into(imageView);//設(shè)置縮略圖Glide.with(context).load(url).thumbnail(0.1f)//設(shè)置為原圖的十分之一.into(imageView);//對(duì)圖片做圓形化處理RequestOptionsoptionsCircle=newRequestOptions().circleCrop();Glide.with(this).load(imageUrl).apply(optionsCircle).into(imageView);借助GlideTransformations庫(kù),我們可以非常輕松的實(shí)現(xiàn)各種基本的圖片變換,如裁剪變換、顏色變換、模糊變換等。使用該庫(kù)需要在模塊的gradle中添加依賴。implementation'jp.wasabeef:glide-transformations:4.3.0'//對(duì)圖片做模糊變換RequestOptionsoptionsBlur=newRequestOptions().transform(newBlurTransformation());Glide.with(this).load(imageUrl).apply(optionsBlur).into(imageView);newBlurTransformation()可以接收0個(gè)參數(shù),1個(gè)參數(shù),2個(gè)參數(shù)。0個(gè)參數(shù)表示采用默認(rèn)值,1個(gè)參數(shù)時(shí)傳入模糊度,2個(gè)參數(shù)時(shí)傳入模糊度和采樣率。//對(duì)圖片做圓角變換RequestOptionsoptionsRounded=newRequestOptions().transform(newRoundedCornersTransformation(10,5));Glide.with(this).load(imageUrl).apply(optionsRounded).into(imageView);newRoundedCornersTransformation()可以接收2個(gè)參數(shù)或3個(gè)參數(shù)。2個(gè)參數(shù)時(shí)傳入角度和外邊距,3個(gè)參數(shù)時(shí)傳入角度、外邊距和圓角類型。//對(duì)圖片添加蒙版RequestOptionsoptionsMask=newRequestOptions().transform(newMaskTransformation(R.drawable.star));Glide.with(this).load(imageUrl).apply(optionsMask).into(imageView);newMaskTransformation()接收1個(gè)參數(shù),傳入目標(biāo)圖片。最終實(shí)現(xiàn)保留覆蓋目標(biāo)像素的源像素,丟棄其余的源像素和目標(biāo)像素的效果。//對(duì)圖片做灰度變換RequestOptionsoptionsGray=newRequestOptions().transform(newGrayscaleTransformation());Glide.with(this).load(imageUrl).apply(optionsGray).into(imageView);newGrayscaleTransformation()接收0個(gè)參數(shù)。//對(duì)圖片做裁剪變換RequestOptionsoptionsCrop=newRequestOptions().transform(newCropTransformation(300,200,CropTransformation.CropType.TOP));Glide.with(this).load(imageUrl).apply(optionsCrop).into(imageView);newCropTransformation()可以接收2個(gè)參數(shù)或3個(gè)參數(shù)。2個(gè)參數(shù)時(shí)傳入裁剪的寬度和高度,此時(shí),從圖片中部進(jìn)行裁剪。3個(gè)參數(shù)時(shí)傳入裁剪的寬度、高度和裁剪位置。裁剪位置可以選擇上、中、下之一。CropTransformation.CropType.TOP表示上,CropTransformation.CropType.CENTER表示中,CropTransformation.CropType.BOTTOM表示下。教學(xué)準(zhǔn)備教材,PPT、教綱、教案參考資料/facebook/fresco,/square/picasso,/bumptech/glide教學(xué)過(guò)程方法與手段教學(xué)備注【課堂導(dǎo)入】圖片處理是Android開(kāi)發(fā)中經(jīng)常會(huì)遇到的操作。如何更好地加載圖片,如何對(duì)圖片做縮放、圓形化等處理?您將能從本任務(wù)介紹的Android常用圖片框架中找到答案。【教學(xué)實(shí)施】8.2.1任務(wù)描述利用Glide框架加載網(wǎng)絡(luò)圖片,并對(duì)加載的圖片進(jìn)行大小調(diào)整、裁剪、添加顏色濾鏡、圓形化、灰度等處理。如圖所示。8.2.2問(wèn)題引導(dǎo)圖片處理是Android開(kāi)發(fā)中經(jīng)常會(huì)遇到的操作。如何更好地加載圖片,如何對(duì)圖片做縮放、圓形化等處理?您將能從本任務(wù)介紹的Android常用圖片框架中找到答案。8.2.3知識(shí)準(zhǔn)備Android常用圖片框架簡(jiǎn)介Glide框架的使用圖片的加載對(duì)圖片的處理8.2.4利用Glide框架加載網(wǎng)絡(luò)圖片,并對(duì)加載的圖片進(jìn)行大小調(diào)整、裁剪、添加顏色濾鏡、圓形化、灰度等處理。8.2.5知識(shí)拓展Glide如何避免內(nèi)存存儲(chǔ)和磁盤存儲(chǔ)【知識(shí)(技能)鞏固練習(xí)】分別對(duì)圖片做圓形化和圓角處理。【教學(xué)小結(jié)】講授、演示課后作業(yè)與訓(xùn)練完成項(xiàng)目5課后練習(xí)對(duì)應(yīng)的習(xí)題。教學(xué)反思

課題項(xiàng)目5任務(wù)3日志框架的使用課型理論課理論課時(shí)1課時(shí)實(shí)踐課時(shí)1課時(shí)教學(xué)目標(biāo)知識(shí)目標(biāo)能力(技能)目標(biāo)理解Logger日志框架的特點(diǎn)。熟悉Logger日志框架的使用。教學(xué)重點(diǎn)Loger框架的基本使用方法。教學(xué)難點(diǎn)根據(jù)不同需要靈活使用Logger的API。教學(xué)內(nèi)容1.Logger簡(jiǎn)介L(zhǎng)ogger打印的日志可以包含線程的信息、類的信息、方法的信息、自定義消息,支持從日志跳轉(zhuǎn)到源碼。如圖8-4所示。圖8-4Logger打印debug信息效果圖2.Logger的使用(1)添加依賴想要使用Logger框架,必須先添加依賴,如下所示:implementation'com.orhanobut:logger:2.2.0'(2)初始化設(shè)置通過(guò)初始化設(shè)置,可以控制日志輸出時(shí)是否顯示線程信息,是否顯示方法信息,顯示的方法棧個(gè)數(shù),添加打印適配器。FormatStrategyformatStrategy=PrettyFormatStrategy.newBuilder().showThreadInfo(true)//是否顯示線程信息,默認(rèn)為true.methodCount(3)//調(diào)用堆棧的方法行數(shù),默認(rèn)為2.tag(TAG)//日志的全局標(biāo)志.默認(rèn)為PRETTY_LOGGER.build();//添加一個(gè)打印適配器Logger.addLogAdapter(newAndroidLogAdapter(formatStrategy));(3)不同級(jí)別日志的打印日志一般分6個(gè)等級(jí),從低到高分別是VERBOSE、DEBUG、INFO、WARN、ERROR、FATAL。對(duì)應(yīng)中文的意思就是繁瑣信息、調(diào)試信息、一般信息、警告信息、錯(cuò)誤信息、嚴(yán)重錯(cuò)誤信息。在記錄日志的時(shí)候,可以根據(jù)不同的日志級(jí)別來(lái)進(jìn)行記錄。Logger的6個(gè)靜態(tài)方法可以用來(lái)打印6種不同級(jí)別的日志信息。具體代碼及含義如下:Logger.i("打印information字符串");Logger.d("打印debug字符串");Logger.e("打印error字符串");Logger.w("打印warning字符串");Logger.v("打印verbose字符串");Logger.wtf("在特殊情況下使用此項(xiàng)打印意外錯(cuò)誤等");(4)打印JSON類型的數(shù)據(jù)把符合JSON格式的字

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論