bppv的診斷和治療學習資料_第1頁
bppv的診斷和治療學習資料_第2頁
bppv的診斷和治療學習資料_第3頁
bppv的診斷和治療學習資料_第4頁
bppv的診斷和治療學習資料_第5頁
已閱讀5頁,還剩36頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

bppv的診斷和治療Retrofit響應數據及異常處理策略Retrofit響應數據及異常處理策略

/Retrofit響應數據及異常處理策略Retrofit響應數據及異常處理策略今天我們來談談客戶端對通訊協議的處理,主要分為三部分:約定響應數據格式,響應數據的自動映射以及錯誤處理三部分。由于數據協議采用json的居多,因此我們在此基礎上進行說明。約定響應數據格式協議格式通常來說,你拿到的設計文檔中會存在通信協議的說明,對于客戶端來說,一個良好的通信協議需要能描述操作狀態(操作碼+操作提示)以操作結果,因此,常見的響應數據的格式如下:{"code":0,"msg":"正常","data":{"id":1,"account":"121313","accountName":"alipay","income":"600.000000"}}code定義code為我們自定義的操作狀態碼,首先來看我們常用的定義:msg定義msg為服務器端返回的操作信息。無論操作成功與否,客戶端都應該根據業務給出準確的提示,客戶端則根據實際情況選擇展示與否。data定義data則是請求返回的具體內容,通常data根據請求接口的不同最終會被解析成不同的實體類。示例下面我們以獲取消息列表和消息詳情兩個接口返回的響應數據作為示例:消息列表:{"code":0,"data":{"list":[{"content":"你參加的活動已經開始了...","createtime":"2016-09-2316:44:02","id":"4480","status":0,"title":"活動開始","type":"1"},{"content":"你參加的活動已經結束...","createtime":"2016-09-1914:30:02","id":"4444","status":0,"title":"活動結束","type":"1"}],"total":2},"msg":"正常"}消息詳情{"code":0,"data":{"detail":{"content":"你參加的活動已經開始了,請準時到你的活動中去執行","createtime":"2016-09-2316:44:02","id":"4480","status":0,"title":"活動開始","type":"1"},},"msg":"正常"}響應數據映射實體數據模型當我們接受到如上格式的響應數據時,下面便是考慮如何應用的問題,也就是如何將協議轉換?是在獲取響應的時候自動轉換還是手動轉換?轉換成Java實體類還是String?“偷懶”是程序員的天性,我們當然不希望花費時間在這種無創造性的工作上,所以我們考慮在收到響應的時候直接將其轉換為java實體類。確定了我們的目標之后,接下來,首要任務是對數據協議進行抽象?什么叫做數據協議抽象?所謂的數據協議抽象就是根據聚合性,通用性,隔離性三原則將整個數據協議進行切分復用,以便更好的映射成我們需要的數據模型。我們對剛才約定的數據協議格式進行協議抽象后,可以拿到類似以下的實體模型:publicclassResult<T>{privateintcode;privateStringmsg;privateTdata;//...set和get方法}Result做為所有響應模型的公共基類,其中的code,msg,data分別用來映射我們通信協議。其中,泛型化的data確保接受不同的實體模型,可以看出,我們通過數據協議抽象之后,最終得到了一個良好的數據模型。為了下面的需要我們一同將消息列表和消息詳情的實體類放上來:publicclassmessage{privateStringcontent;privateStringcreatetime;privateStringid;privateintstatus;privateStringtitle;privateStringtype;//...set和get方法}publicclassmessageList{privateinttotal;privateList<Message>list;//...set和get方法}現在來看看我們理想的獲取消息列表和獲取消息詳情的接口應該是什么樣的:@GET("/user/message/list")Call<Result<MessageList>>getMessageList(@Query("page")intpage);@GET("/user/message")Call<Result<Message>>getMessage(@Query("mid")intmid);結合我們上面所述,我們希望每個api最后返回給我們的都是Result接下來是添加Converter依賴:最后為retrofit設置Converter:Retrofitretrofit=newRetrofit.Builder()m").addConverterFactory(GsonConverterFactory.create()).build();GitHubServiceservice=retrofit.create(GitHubService.class);這樣,我們的請求和響應由Gson進行處理:請求體(使用@Body)被映射成json,響應體被映射成實體數據模型。上面我們談到了通訊協議格式以及如何利用retrofit的Converter實現協議和實體之間的自動映射。此時我們調用任何服務接口其使用大體如下,以獲取消息列表接口為例:Call<Result<MessageList>>call=ApiFactory.getUserApi().getMessageList(mCurrentPage*getPageSize(),getPageSize());call.enqueue(newCallback<Result<MessageList>>(){@OverridepublicvoidonResponse(Call<Result<MessageList>>call,Response<Result<MessageList>>response){Result<MessageList>result=response.body();if(result.isOk()){//操作正確}else{//操作失敗switch(result.getCode()){case1:break;case2:break;case3:break;case4:break;case5:break;}}}@OverridepublicvoidonFailure(Call<Result<MessageList>>call,Throwablet){//響應失敗}});錯誤處理引入RxJava之前哪點事按道理說,retrofit講到這里已經足夠了,在此基礎上在進行二次封裝形成自己的框架也很不錯。但是由于RxJava發展確實不錯,因此retrofit引入對rxjava的支持,二者的有效結合才能發揮更強大的力量。不了解RxJava同學可以就此打住或者先去了解相關資料。rxjava并無多大難度,明白理論之后再加上多練即可。對rxjava實現感興趣的童鞋可以參看去年寫的教你寫響應式框架再來說說,在新項目開始的時候,我為什么選擇引入rxjava,不引入不行么?我并未考慮引入rxjava的原因我只想使用retrofit這個網絡請求庫代替原有的async-http-client,后面發現引入rxjava能夠非常容易的幫助我們進行線程切換以及合理的處理網絡異常。如何引入rxjava?引入rxjava非常簡單,需要添加以下依賴:compile'io.reactivex:rxjava:'compile'io.reactivex:rxandroid:1.1.0'接下來還需要引入adapter來將retrofit中Call轉換為rxjava中的Observable:'最后需要在代碼中啟用該adapter:Retrofit.BuildermBuilder=newRetrofit.Builder().addCallAdapterFactory(RxJavaCallAdapterFactory.create())現在看引入RxJava之后接口的變化,同樣還是以獲取消息列表為例:引入之前:@GET("/user/message/list")Call<Result<MessageList>>getMessageList(@Query("start")intstart,@Query("length")intlength);引入之后:@GET("/user/message/list")Observable<Result<MessageList>>getMessageList(@Query("start")intstart,@Query("length")intlength);得益于retrofit良好的設計,加入對rxjava的支持對我們接口的影響非常之小。自定義Converter統一錯誤處理我們對異常總是感覺麻煩,在客戶端開發中,網絡異常更是重中之重。現在讓我們回到開始,來看這段代碼:ApiFactory.getUserApi().getMessageList(0,10).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(newSubscriber<Result<MessageList>>(){@OverridepublicvoidonCompleted(){}@OverridepublicvoidonError(Throwablee){//handlethrowable}@OverridepublicvoidonNext(Result<MessageList>result){if(result.isOk()){MessageListmessageList=result.getData();//handlemessageList}else{intcode=result.getCode();switch(code){case1:break;case2:break;case3:break;case4:break;case5:break;}}}});看起很棒,我們用了rxjava中線程切換避免以往繁瑣的操作。但是好像不是那么完美:在rxjava中,所有的異常都是放在onError(),而這里的onNext()好像不是那么純粹,既要承擔正常業務邏輯還是處理異常的錯誤邏輯,換言之,onNext()干了onError()的事情,這看起來很不協調?另外,如果每個接口都要這么做,不但繁瑣而且還會長城很多重復性的代碼,長久以往,整個項目的工程質量將無法把控。實際上,我們希望所有的異常都是統一在onError()中進行處理。那么這里我們急需要明確下異常的范圍:響應數據中code非0的情況以及其他異常。為了更好描述code非0的情況,我們定義ApiException異常類:publicclassApiExceptionextendsRuntimeException{privateinterrorCode;publicApiException(intcode,Stringmsg){super(msg);this.errorCode=code;}publicintgetErrorCode(){returnerrorCode;}}另外為了更好描述code,我們也將其定義成ApiErrorCode:publicinterfaceApiErrorCode{/**客戶端錯誤*/intERROR_CLIENT_AUTHORIZED=1;/**用戶授權失敗*/intERROR_USER_AUTHORIZED=2;/**請求參數錯誤*/intERROR_REQUEST_PARAM=3;/**參數檢驗不通過*/intERROR_PARAM_CHECK=4;/**自定義錯誤*/intERROR_OTHER=10;/**無網絡連接*/intERROR_NO_INTERNET=11;}現在問題就是如何將ApiException納入到rxjava的onError()當中,也就是在哪里拋出該類異常。retrofit中的Converter承擔了協議映射的功能,而ApiException只有在映射之后才能拋出,因此Converter是拋出ApiException的切入點。先來對Converter接口有個初步的了解,其源碼如下:publicinterfaceConverter<F,T>{Tconvert(Fvalue)throwsIOException;//用于創建Converter實例abstractclassFactory{//響應體轉換publicConverter<ResponseBody,?>responseBodyConverter(Typetype,Annotation[]annotations,Retrofitretrofit){returnnull;}//請求體轉換publicConverter<?,RequestBody>requestBodyConverter(Typetype,Annotation[]parameterAnnotations,Annotation[]methodAnnotations,Retrofitretrofit){returnnull;}publicConverter<?,String>stringConverter(Typetype,Annotation[]annotations,Retrofitretrofit){returnnull;}}}接下來,我們從retrofit提供的converter-gson的實現看起.其結構非常簡單:GsonConverterFactory,GsonRequestBodyConverter及GsonResponseBodyConverter,分別來看一下起源碼:GsonRequestBodyConverter源碼://請求體轉換finalclassGsonRequestBodyConverter<T>implementsConverter<T,RequestBody>{privatestaticfinalMediaTypeMEDIA_TYPE=MediaType.parse("application/json;charset=UTF-8");privatestaticfinalCharsetUTF_8=Charset.forName("UTF-8");privatefinalGsongson;privatefinalTypeAdapter<T>adapter;GsonRequestBodyConverter(Gsongson,TypeAdapter<T>adapter){this.gson=gson;this.adapter=adapter;}@OverridepublicRequestBodyconvert(Tvalue)throwsIOException{Bufferbuffer=newBuffer();Writerwriter=newOutputStreamWriter(buffer.outputStream(),UTF_8);JsonWriterjsonWriter=gson.newJsonWriter(writer);adapter.write(jsonWriter,value);jsonWriter.close();returnRequestBody.create(MEDIA_TYPE,buffer.readByteString());}}GsonResponseBodyConverter源碼://響應體轉換finalclassGsonResponseBodyConverter<T>implementsConverter<ResponseBody,T>{privatefinalTypeAdapter<T>adapter;GsonResponseBodyConverter(TypeAdapter<T>adapter){this.adapter=adapter;}@OverridepublicTconvert(ResponseBodyvalue)throwsIOException{try{returnadapter.fromJson(value.charStream());}finally{value.close();}}}GsonConverterFactory源碼://轉換器publicfinalclassGsonConverterFactoryextendsConverter.Factory{privatefinalGsongson;publicstaticGsonConverterFactorycreate(){returncreate(newGson());}publicstaticGsonConverterFactorycreate(Gsongson){returnnewGsonConverterFactory(gson);}privateGsonConverterFactory(Gsongson){if(gson==null)thrownewNullPointerException("gson==null");this.gson=gson;}@OverridepublicConverter<ResponseBody,?>responseBodyConverter(Typetype,Annotation[]annotations,Retrofitretrofit){TypeAdapter<?>adapter=gson.getAdapter(TypeToken.get(type));returnnewGsonResponseBodyConverter<>(adapter);//創建響應轉換器}@OverridepublicConverter<?,RequestBody>requestBodyConverter(Typetype,Annotation[]parameterAnnotations,Annotation[]methodAnnotations,Retrofitretrofit){TypeAdapter<?>adapter=gson.getAdapter(TypeToken.get(type));returnnewGsonRequestBodyConverter<>(gson,adapter);//創建請求轉換器}}到這里我們已經有思路了:我們需要在修改GsonResponseBodyConverter,在其中加入拋出ApiException的代碼.仿照converter-gson結構,我們自定義custom-converter-gson:仿照GsonResponseBodyConverter編寫MyGsonResponseBodyConverter:publicclassMyGsonResponseBodyConverter<T>implementsConverter<ResponseBody,T>{privatestaticfinalCharsetUTF_8=Charset.forName("UTF-8");privatefinalGsonmGson;privatefinalTypeAdapter<T>adapter;publicMyGsonResponseBodyConverter(Gsongson,TypeAdapter<T>adapter){mGson=gson;this.adapter=adapter;}@OverridepublicTconvert(ResponseBodyvalue)throwsIOException{Stringresponse=value.string();Resultre=mGson.fromJson(response,Result.class);//關注的重點,自定義響應碼中非0的情況,一律拋出ApiException異常。//這樣,我們就成功的將該異常交給onError()去處理了。if(!re.isOk()){value.close();thrownewApiException(re.getCode(),re.getMsg());}MediaTypemediaType=value.contentType();Charsetcharset=mediaType!=null?mediaType.charset(UTF_8):UTF_8;ByteArrayInputStreambis=newByteArrayInputStream(response.getBytes());InputStreamReaderreader=newInputStreamReader(bis,charset);JsonReaderjsonReader=mGson.newJsonReader(reader);try{returnadapter.read(jsonReader);}finally{value.close();}}}仿照GsonRequestBodyConverter編寫MyGsonRequestBodyConverter:publicclassMyGsonRequestBodyConverter<T>implementsConverter<T,RequestBody>{privatestaticfinalMediaTypeMEDIA_TYPE=MediaType.parse("application/json;charset=UTF-8");privatestaticfinalCharsetUTF_8=Charset.forName("UTF-8");privatefinalGsongson;privatefinalTypeAdapter<T>adapter;publicMyGsonRequestBodyConverter(Gsongson,TypeAdapter<T>adapter){this.gson=gson;this.adapter=adapter;}@OverridepublicRequestBodyconvert(Tvalue)throwsIOException{Bufferbuffer=newBuffer();Writerwriter=newOutputStreamWriter(buffer.outputStream(),UTF_8);JsonWriterjsonWriter=gson.newJsonWriter(writer);adapter.write(jsonWriter,value);jsonWriter.close();returnRequestBody.create(MEDIA_TYPE,buffer.readByteString());}}仿照GsonConverterFactory編寫MyGsonConverterFactory:publicclassMyGsonConverterFactoryextendsConverter.Factory{privatefinalGsongson;privateMyGsonConverterFactory(Gsongson){if(gson==null)thrownewNullPointerException("gson==null");this.gson=gson;}publicstaticMyGsonConverterFactorycreate(){returncreate(newGson());}publicstaticMyGsonConverterFactorycreate(Gsongson){returnnewMyGsonConverterFactory(gson);}@OverridepublicConverter<ResponseBody,?>responseBodyConverter(Typetype,Annotation[]annotations,Retrofitretrofit){TypeAdapter<?>adapter=gson.getAdapter(TypeToken.get(type));returnnewSTGsonResponseBodyConverter<>(gson,adapter);}@OverridepublicConverter<?,RequestBody>requestBodyConverter(Typetype,Annotation[]parameterAnnotations,Annotation[]methodAnnotations,Retrofitretrofit){TypeAdapter<?>adapter=gson.getAdapter(TypeToken.get(type));returnnewSTGsonRequestBodyConverter<>(gson,adapter);}}接下來只需要在的Retrofit中使用MyGsonConverterFactory即可:Retrofit.BuildermBuilder=newRetrofit.Builder().addConverterFactory(MyGsonConverterFactory.create())//.addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create())通過上面的改進,我們已經成功的將所有異常處理點轉移至onError()當中了。這時,我們再來對比一下獲取消息列表接口的使用:ApiFactory.getUserApi().getMessageList(0,10).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(newSubscriber<Result<MessageList>>(){@OverridepublicvoidonCompleted(){}@OverridepublicvoidonError(Throwablee){if(einstanceofHttpException){//handle}elseif(einstanceofIOExcepton){//handle}elseif(einstanceofApiException){ApiExceptionexception=(ApiException)e;intcode=result.getErrorCode();switch(code){caseApiErrorCode.ERROR_CLIENT_AUTHORIZED://handlebreak;caseApiErrorCode.ERROR_USER_AUTHORIZED://handlebreak;caseApiErrorCode.ERROR_REQUEST_PARAM://handlebreak;caseApiErrorCode.ERROR_PARAM_CHECK://handlebreak;caseApiErrorCode.ERROR_OTHER://handlebreak;caseApiErrorCode.ERROR_NO_INTERNET://handlebreak;}else{//handle}}@OverridepublicvoidonNext(Result<MessageList>result){MessageListmessageList=result.getData();//handlemessageList}}});到現在,已經解決了統一異常處理點的問題,接下來便是要解決公共異常。不難發現,對于大部分網絡異常來說,我們處理策略是相同的,因此我們希望抽取公共異常處理。除此之外,在網絡真正請求之前,需要對網絡進行判斷,無網絡的情況下直接拋出響應異常。這時候就需要自定BaseSubscriber,并在其中做相關的處理:publicclassBaseSubscriber<T>extendsSubscriber<T>{privateContextmContext;publicBaseSubscriber(){}publicBaseSubscriber(Contextcontext){mContext=context;}@OverridepublicvoidonStart(){//請求開始之前,檢查是否有網絡。無網絡直接拋出異常//另外,在你無法確定當前代碼運行在什么線程的時候,不要將UI的相關操作放在這里。if(!TDevice.hasInternet()){this.onError(newApiException(ApiErrorCode.ERROR_NO_INTERNET,"networkinterrupt"));return;}}@OverridepublicvoidonCompleted(){}@OverridepublicvoidonError(Throwablee){ApiErrorHelper.handleCommonError(mContext,e);}@OverridepublicvoidonNext(Tt){}}//輔助處理異常publicclassApiErrorHelper{publicstaticvoidhandleCommonError(Contextcontext,Throwablee){if(einstanceofHttpException){Toast.makeText(context,"服務暫不可用",Toast.LENGTH_SHORT).show();}elseif(einstanceofIOException){Toast.makeText(context,"連接失敗",Toast.LENGTH_SHORT).show();}elseif(einstanceofApiException){//ApiException處理}else{Toast.makeText(context,"未知錯誤",Toast.LENGTH_SHORT).show();}}}現在再來看看獲取消息列表接口的使用ApiFactory.getUserApi().getMessageList(mCurrentPage*getPageSize(),getPageSize()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(newBaseSubscriber<Result<MessageList>>(){@OverridepublicvoidonNext(Result<MessageList>result){MessageListmessageList=result.getData();//handlemessageList}});大部分接口的使用都和以上類似,針對個別異常處理只需要重寫onError()方法即可。

三年級下冊道法第二單元三年級下冊道法第二單元

頁三年級下冊道法第二單元

一、擇優錄取。1、我們生活的社區里你發現了破壞環境的不文明行為()。小區綠地被侵占種菜B生活區道路被私家車當成停車場C東東領養了小區的一塊綠地每天給綠地澆水D、以上三種都是村里家家戶戶有了自來水,可為什么人們依然喜歡到井邊來()。因為這里的水比自來水好喝B、人們可以在這里快樂的聊天孩子們可以在這里快樂的游戲D、這口并是全村人的大客廳我為社區盡一份力()。A清潔社區環境B、領養社區里的.塊綠地C、鏟平綠地讓爺爺奶奶種菜D、垃圾分類4、假如你社區的道路坑坑洼洼,你應該()。A.反正已經壞了,我再挖幾個坑B、也不光我一個人走,無所謂C、向有關部門反映,并盡我最大所能幫助大家5假如你的鄰居半夜跳舞打擾到了你的休息,你應該()。A,我也跳舞,聲音比他還大B怒氣沖沖找鄰居理論耐心和鄰居講道理.希望他能聲音小點鄰居之間發生了小矛盾,要()。及時報警B、毫不在乎C及時調解D、避開對方下列做法不正確的一項是()。A打掃公共樓梯B、要下雨了幫鄰居收衣服C幫助鄰居拿信D、半夜放音樂,而且音量很大河北省有我國現存最大的皇家園林(),有號稱"天下第一.關”的(),有世界上現在最古老的大型圓弧式石拱橋(),有趙武靈王為休息娛樂和觀看操練兵馬興建的()。A、山海關B承德避暑山莊C、趙州橋D、邯鄲叢臺你能根據下面的提示,猜出幾位同學的家鄉在哪里嗎?我的家鄉的電話號碼的區號是010();我的家鄉簡稱是蘇();我的家鄉有美麗的麗江();紫荊花是我家鄉的區花()。A、江蘇省B、北京市C、香港D、云南省10如果我們來當小導游,下列說法不正確的是()。把我們家鄉的資料圖片等制作成家鄉手冊,可以用作客人的導游手冊把家鄉的美景用文字記錄下來,讓游人來閱讀可以把自己熟悉的地方畫下來并寫.段導游詞D、把游客領到商店盡情購物11、不同的地方人們在生活與飲食習慣方面往往會不同,比如:山西人愛吃(),重慶人喜歡吃(),四川人愛吃(),蒙古族人喜歡()。A、喝奶茶?B、辣椒C、刀削面D、火鍋明辨是非。1、看到小區里的健身器材又壞了,小明視而不見。()2我們村子的小河邊沒有警示牌,如果有人下河游泳會很危險,不如我自己制作一個警示牌!()3東東領養了小區里的一塊綠地經常利用課余時間給綠地澆水。()看到村里的路被大卡車壓壞了,蘭蘭主動找到村委會反映情況。小晴為了些小事情常與鄰居小朋友發生爭吵。鄰居家里發生了事,最好少管閑事。美美來找華華玩看到華華的谷谷午睡了,就說華華我們把電視的音量()我認識自己的家鄉就可以了,沒必要知道它所在的省市。我們要愛護家鄉的一草一木,為家鄉的美麗而驕做。我們不僅要認識自己的家鄉,還要了解家鄉的特產。辨析題鄰居之間相處也會遇到矛盾,遇到下面情況,你會怎么辦?鄰居家的鴨子沒有看管好,跑到我家稻田里破壞了秧苗樓上阿姨經常晚上唱歌聲音很大,影響了我們家人的生活。對答如流。(共28分每題7分)在你生活的地方你最喜歡哪里?說出來與大家分享。你居住的村莊或社區叫什么名字?你知道這個名字的來歷嗎?在你的鄰里生活中遇到過什么矛盾?你們是如何處理的?4、家鄉哪些人令你佩服呢?你佩服他門的原因是什么?一、擇優錄取。小明和小亮是.對好朋友,但兩個人的性格截然不同,他們之所以會成為好朋友是因為()。A、小明和小亮都能夠相互寬容,求同存異B小明和小亮都能做到凡事都不講原則.相互體諒。C小明和小亮都能夠相互原諒對方的切過錯,包括一些原則性錯誤。D小明和小亮都非常懦弱,都很膽小怕事下列同學的想法正確的是()。A我成績很差,在班里是多余的人B、不是班干部就不用管班里的事C我體育很好,也是班里的驕傲下面同學做法正確的是()。李東不小心把同學的本子弄濕了雖然對方井不知道是他弄的,他還是主動向對方道了歉,張明忘記完成老師布置的作業。老師檢查作業時,張明誠稱作業完成了,忘在家里了。C.老師表揚鄧彬板報爵得好,鄧彬說:”“這是陳明明畫的,我只是涂了顏|色”。5我們生活的社區且你發現了破壞環境的不文明行為()。小區綠地被侵占種菜B.生活區道路被私家車當成停車場C:東東領養了小區的塊綠地每天給合綠地澆水D、以上三種都是二、對答如流。1.,我們來當小導游該做哪些準備?該怎樣介紹呢?你還能在地圖上找到你家鄉的鄰省(自治區直轄市、特別行政區嗎?三、明辨是非。1、我考試成績不理想,讓我感到很沒面子,我開始討厭自己了。2、我的特長比其他同學的特長好,所以我比別人棒。3、小海的試卷發下來后發現總分多了5分,馬上告訴老師請老師把分數改過來。4、在與同班的交往中有歡笑、有淚水有甜蜜、也有苦澀。()5、東東領養了小區里的.塊綠地,經常利用課余時間給綠地澆水。這塊綠地被小區里的人種上菜了,不如我們家也在綠地種點菜。鄰居家里發生了事,最好少管閑事。()在自己家里的活動可以肆無忌憚,可以隨便打擾樓上樓下的鄰居。我們要愛護家鄉的一草一木,為家鄉的美麗而驕傲。10、家鄉的特產我不喜歡吃,因此別人問我特產就說沒有。

初三化學試卷分析初三化學試卷分析

PAGE

/

PAGE

3

初三化學試卷分析初三上學期化學試卷分析一、試卷結構本次期末試卷覆蓋面廣,題型新穎,共分3個大題,29道小題,突出考查學生對基礎知識的掌握。試卷還注重考查學生閱讀信息的能力和知識歸納能力。試卷圖文并茂,文字閱讀量大且信息豐富,對學生具有吸引力。試卷體現了試題的時代性,能激發學生學習化學的興趣。二、試題特點1.本次期末試卷的命題是以義務教育化學課程標準的有關內容為依據,重點考查學生化學基礎知識和基本技能、基本方法和情感態度價值觀,以及對化學、技術和社會之間相互關系的理解,運用化學知識解決簡單實際問題的能力等。2.試題有利于引導教師改變教學方式,促進學生生動、活潑、主動地學習,堅持以學生的發展為本,注重激發學生學習化學的興趣,提高學生的科學探究能力和實踐能力,培養學生積極的情感態度與價值觀。3.命題采用主題設計,突出“化學-技術-社會”的教育思想。“生活-化學-社會”的基本思路貫穿整份試卷。4.試卷在重視考查基礎知識的同時,設計了科學探究題,加強對學生科學素養(知識與技能、過程與方法、情感態度價值觀)的考查,引導學生改變學習方式。體現學科滲透,融合科學精神和人文思想。三、答卷情況試題分析本次考試,從我所教考試學生成績進行試卷分析。從總成績上看,提高班43人參考,80分以上的有31名,60分以上的有43名,及格率100%。普通班總的來說成績還不太理想,沒有達到預期的目的。1、選擇題選擇題共15道小題,每題2分,總計30分。重點考查的是學生對基礎知識的掌握程度以及應用的能力。選擇題也是得分率較低的一道題,有4人得到了滿分。其中錯得較多的是第5、9、14、15題。2、填空題填空題共9小題,滿分40分。主要是考察學生的基礎知識掌握情況,學生得分率較高。不少學生都得到了滿分,錯得多的是21、24小題。3、綜合題實驗探究題共有5道小題,滿分30分。第28題得分率能較低,說明我們的學生在實驗方面的能力還不夠,對一些實驗設計的用途,頭腦中還沒有一個清晰的概念,在今后的教學中有待加強這方面的教學。四、改進措施1、基本概念、基本理論的教學還應加強本次考試由于是全員參與,復習課本,因此基礎知識部分比重偏大,從答卷情況上看,基礎知識部分很多同學還存在著對知識點掌握不全面、不準確的情況,在各道題上都有表現。從本次考試中暴露出的問題有:化學用語的描述、實驗過程的設計、等等。特別是化學用語這部分內容,從總體上看學生掌握的情況最不好,不僅成績低的學生失分,甚至高分段的學生在這部分也有失分,在查閱試卷的過程中我就發現有相當一部分學生,所失的兩分就失在化學用語上。2、學生的一些習慣不規范作為即將升入高中的九年級學生,有很多習慣應該養成,在本次考試的試卷上,卷面隨意涂抹、勾改;字跡潦草、錯別字;大量使用涂改液等現象十分的嚴重。這些看似小毛病,但可能在中考時可能就會成為學生失分的原因。雖然說現在接近離中考,但是還是能形成一個好的習慣,改掉一個壞的習慣的。針對這些問題,我們在以后的教學中要有針對性的做好以下幾點:1、重視“三基”腳踏實地打好基礎對于基礎知識、基本技能的教學一定要注重知識點的全面性、準確性、系統性。九年級的知識點多而且相對較深,在教學中一定要注意知識點的講解必須全面,不放過每一個知識點,而且講解必須準確、無誤;九年級的知識點間聯系較為密切,在教學中要注重引導學生將知識形成一個系統,這樣便于學生理解、記憶;還要注重培養學生的語言表達能力,文字表述要準確、切中要害。特別要注重對學生在基本方法方面的培養,現在的中考比較注重對學生分析問題、解決問題能力的考核,而這又是我們學生比較欠缺的。要讓學生學會分析、敢于分析、善于分析。而這些能力的培養,除了通過習題來練習外,在教學中也要注意培養學生去主動思考教學中的問題,提出自己的見解,分析自己的見解是否正確。2、注重培養學生解決實際問題的能力在牢固掌握知識點的基礎上,還要能夠正確的運用這些知識點去解決一些實際問題。現在的中考往往會出一些現實生活中的實際問題,考生結合自己的已有知識,選擇合適的方法去解決這些問題。這樣就要求學生不僅對知識點的掌握要牢固,還要能正確的運用。3、關注社會熱點,收集多方信息化學和社會、生活、工業、農業等各方面的聯系很密切,社會上很多的熱點問題與化學都有聯系,而這些問題往往在中考中都能體現出來。關注這些社會熱點問題,不僅能幫助我們應對中考,而且通過對這些熱點問題的分析還能培養、鍛煉學生分析問題、解決問題的能力,還可以激發學生學習化學的興趣。總之,從實際出發,總結經驗,吸取教訓。全面實施素質教育,面向全體學生,關注每一個學生的進步與成長。首先要扎扎實實抓各學段的合格率,這樣才能提高初中畢業合格率,最后取得高的升學率及較好的優秀率。

變化的世界教案變化的世界教案

/變化的世界教案課題

1.變化的世界

類型

新授

課時

二課時

教學目標

探究目標

1、能用各種感觀察覺到周圍的物體都在不斷的發生變化。2、能從物體變化現象中提出自己感興趣的問題。3、能說出兩種以上記錄某一物體變化的方法。

?情感目標

1、愿意與其他小組交流本組觀察到的各種變化現象。能感受到自然界中各種物體變化的奇妙。2、能堅持對一種選定的物體進行長期的觀察,并能將觀察女誡國用兩種以上的方式記錄下來。

知識目標

1、舉例說明什么叫做變化。2、能根據自己的標準對觀察到的變化進行分類。3、能知道幾種不同的記錄方式。

STSE目標

開始意識到自然界的物質都在不斷變化。

教學重點

1.身邊的世界是變化的;2.記錄物體的變化。

教學難點

1.制定標準,對變化分類;2.涉及記錄方案。

教學用具

投影儀、冰塊實物或多媒體素材(如冰塊為圖片,可能還需要水的圖片)。

教學過程

教學環節

教師活動

學生活動

調整與補充

?引??入??探?究?活?動??

1、展示冰塊,教師借助于冰水轉化的例子進行導入。同學們,這是什么呢?對,這是冰塊。大家知道冰塊是怎么形成的嗎?2、同學們說得非常正確。水成了冰,其實就是一個變化過程。同學們,在我們身邊的變化多不多呢?

1、學生觀察。?冰是由水凍成的。?2、說一說。教師要求學生說說印象中其它的變化現象,并簡單說說是如何變化的。

?

一、活動:“我知道的變化”剛才大家舉出了各種各樣的變化過程,可見我們身邊的世界到處都在發生著變化,這些變化一樣嗎?那么,他們之間有什么不同呢?說說理由。同學們,大家知道什么是變化嗎?讓同學們在小組中討論,看看這些變化之間有什么區別?你們能不能自己討論確定一個標準,然后對這些變化進行分類。二、觀察各種的變化1、師示范一些化學變化。2、教師小結。

???1、不一樣。???2、生看圖體會生活中的各種變化。3、說說我們知道的變化。4、把自己知道的變化記錄下來。?5、小組交流我們的記錄。6、給這些變化分分類。?1、生觀察(提出質疑)2、分組討論分析這些變化。

?

????????探?究?活?動????拓?展

一、討論“解釋什么叫變化”1、學生小組說說自己的結果(如果必要,可以使用投影儀等電化設備)。對于學生的回答,教師要注意進行積極的評價,對于不太正確的說法,可以通過讓同學補充的方法進行改正。?二、活動:“記錄物體的變化”我們雖然知道了很多很多的變化,也知道了我們生活的世界無時無刻不再變化,但是,我們卻不可能完全憑大腦記憶,即使現在能記住的,以后也許就會忘記。大家說,我們該怎么辦呢?大家來想想辦法。1、引導學生回憶我們學過的幾種不同的記錄方式。

1、請生根據自己找到的各種物質變化試著解釋什么叫變化。2、討論:自然界中有沒有永遠不變的事物。???(學生回答)做記錄。?1、分析我們對一種植物的長期觀察的方法。?2、分組設計一種記錄方式。?3、我們怎樣來記錄這種變化?需要什么工具???

?

1、活動“尋找我們身邊的變化?”請學生在生活中找找周圍物體的各種變化。2、選擇自己感興趣的變化進行觀察并記錄。

板書設計

1、變化的世界我們知道的變化:火山爆發、鐵釘生銹、四季變化、天氣變化…按大小分類???按時間長短分類:????

不銹鋼中各元素的作用不銹鋼中各元素的作用

/不銹鋼中各元素的作用1、鎳Ni:鎳在不銹鋼中的主要作用在于它改變了鋼的晶體結構。在不銹鋼中增加鎳的一個主要原因就是形成奧氏體晶體結構,從而改善諸如可塑性、可焊接性和韌性等不銹鋼的屬性,所以鎳被稱為奧氏體形成元素。普通碳鋼的晶體結構稱為鐵氧體,呈體心立方(BCC)結構,加入鎳,促使晶體結構從體心立方(BCC)結構轉變為面心立方(FCC)結構,這種結構被稱為奧氏體。然而,鎳并不是唯一具有此種性質的元素。常見的奧氏體形成元素有:鎳、碳、氮、錳、銅。這些元素在形成奧氏體方面的相對重要性對于預測不銹鋼的晶體結構具有重要意義。目前,人們已經研究出很多公式來表述奧氏體形成元素的相對重要性,最著名的是下面的公式:奧氏體形成能力=Ni%+30C%+30N%+0.5Mn%+0.25Cu%從這個等式可以看出:碳是一種較強的奧氏體形成元素,其形成奧氏體的能力是鎳的30倍,但是它不能被添加到耐腐蝕的不銹鋼中,因為在焊接后它會造成敏化腐蝕和隨后的晶間腐蝕問題。氮元素形成奧氏體的能力也是鎳的30倍,但是它是氣體,想要不造成多孔性的問題,只能在不銹鋼中添加數量有限的氮。添加錳和銅會造成煉鋼過程中耐火生命減少和焊接的問題。從鎳等式中可以看出,添加錳對于形成奧氏體并不非常有效,但是添加錳可以使更多的氮溶解到不銹鋼中,而氮正是一種非常強的奧氏體形成元素。在200系列的不銹鋼中,正是用足夠的錳和氮來代替鎳形成100%的奧氏體結構,鎳的含量越低,所需要加入的錳和氮數量就越高。例如在201型不銹鋼中,只含有4.5%的鎳,同時含有0.25%的氮。由鎳等式可知這些氮在形成奧氏體的能力上相當于7.5%的鎳,所以同樣可以形成100%奧氏體結構。這也是200系列不銹鋼的形成原理。在有些不符合標準的200系列不銹鋼中,由于不能加入足夠數量的錳和氮,為了形成100%的奧氏體結構,人為的減少了鉻的加入量,這必然導致了不銹鋼抗腐蝕能力的下降。在不銹鋼中,有兩種相反的力量同時作用:鐵素體形成元素不斷形成鐵素體,奧氏體形成元素不斷形成奧氏體。最終的晶體結構取決于兩類添加元素的相對數量。鉻是一種鐵素體形成元素,所以鉻在不銹鋼晶體結構的形成上和奧氏體形成元素之間是一種競爭關系。因為鐵和鉻都是鐵素體形成元素,所以400系列不銹鋼是完全鐵素體不銹鋼,具有磁性。在把奧氏體形成元素-鎳加入到鐵-鉻不銹鋼的過程中,隨著鎳成分增加,形成的奧氏體也會逐漸增加,直至所有的鐵素體結構都被轉變為奧氏體結構,這樣就形成了300系列不銹鋼。如果僅添加一半數量的鎳,就會形成50%的鐵素體和50%的奧氏體,這種結構被稱為雙相不銹鋼。400系列不銹鋼是一種鐵、碳合鉻的合金。這種不銹鋼具有馬氏體結構和鐵元素,因此具有正常的磁特性。400系列不銹鋼具有很強的抗高溫氧化能力,而且與碳鋼相比,其物理特性和機械特性都有進一步的改善。大多數400系列不銹鋼都可以進行熱處理。300系列不銹鋼是一種含有鐵、碳、鎳和鉻的合金材料,一種無磁性不銹鋼材料,比400系列不銹鋼具有更好的可鍛特性。由于300系列不銹鋼的奧氏體結構,因此它在許多環境中具有很強的抗腐蝕性能,具有很好的抗金屬超應力引起的腐蝕所造成的斷裂的性能,而且其材料特性不受熱處理的影響。是主要奧氏體形成元素,能減緩鋼的腐蝕現象及在加熱時晶粒的長大鎳在不銹鋼中的主要作用在于它改變了鋼的晶體結構。在不銹鋼中增加鎳的一個主要原因就是形成奧氏體晶體結構,從而改善諸如可塑性、可焊接性和韌性等不銹鋼的屬性,所以鎳被稱為奧氏體形成元素。普通碳鋼的晶體結構稱為鐵氧體,呈體心立方(BCC)結構,加入鎳,促使晶體結構從體心立方(BCC)結構轉變為面心立方(FCC)結構,這種結構被稱為奧氏體。然而,鎳并不是唯一具有此種性質的元素。常見的奧氏體形成元素有:鎳、碳、氮、錳、銅。這些元素在形成奧氏體方面的相對重要性對于預測不銹鋼的晶體結構具有重要意義。目前,人們已經研究出很多公式來表述奧氏體形成元素的相對重要性,最著名的是下面的公式:奧氏體形成能力=Ni%+30C%+30N%+0.5Mn%+0.25Cu%從這個等式可以看出:碳是一種較強的奧氏體形成元素,其形成奧氏體的能力是鎳的30倍,但是它不能被添加到耐腐蝕的不銹鋼中,因為在焊接后它會造成敏化腐蝕和隨后的晶間腐蝕問題。氮元素形成奧氏體的能力也是鎳的30倍,但是它是氣體,想要不造成多孔性的問題,只能在不銹鋼中添加數量有限的氮。添加錳和銅會造成煉鋼過程中耐火生命減少和焊接的問題。2、碳C:含碳量增加可提高強度。碳可以與不銹鋼中的其它元素形成化合物Cr23C6、NbC、TiC、TaC等碳化物。對耐腐蝕性而言,當固溶奧氏體中的碳與鉻形成Cr23C6析出時,使鋼對晶間腐蝕、點腐蝕的敏感性急劇上升,因此對耐腐蝕要求高的設備,要采用含碳量低的(在0.03%以下)的不銹鋼。是強奧氏體形成元素,可顯著提高鋼的強度,另外碳對耐腐蝕性也有不利的影響3、錳Mn:可改善耐高溫強度,錳一般在不銹鋼中,使腐蝕性和耐氧化性下降。4、鉻Cr:鉻是不銹鋼的基本成分,不銹鋼保持鈍態要求含鉻量大于12%。增加含鉻量,對提高鋼對氧化性酸的耐腐蝕性極為有效,同時也使耐點腐蝕性提高。是主要鐵素體形成元素,鉻與氧結合能生成耐腐蝕的Cr2O3鈍化膜,是不銹鋼保持耐蝕性的基本元素之一,鉻含量增加可提高鋼的鈍化膜修復能力,一般不銹鋼中的鉻含量必須在12%以上;5、鎳Ni:鎳是奧氏體不銹鋼的基本元素之一。隨著含鎳量的提高,奧氏體

溫馨提示

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

評論

0/150

提交評論