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

提交评论