教你如何用代码实行网络交互

    作者:课课家教育更新于: 2019-03-15 16:38:14

    Web开发

      Android的前端和后排其实是有一个管理的平台,在这里我们能够做很多的事情,那就是修改或者是改变Android轻松实现网络交互模板只要我们通过后台的输入模式来进行,前提保证网络和测试的环境,我们需要一个辅助的代码工具,在这里我需要强调的是在代码的编写上我们要一步步的进行版块之间的交互。

      做好以下几个工作。

      1.与后台接触的板块交互工作。

      2.JSON是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读,同时也方便了机器进行解析和生成。学会如何使用json

      3.测试最主要的一点就是网络的连接问题,我们要保持网络畅通,不会中途出现段网的现象。

      4.AsyncTask不能完全取代线程,在一些逻辑较为复杂或者需要在后台反复执行的逻辑就可能需要线程来实现了。

      我们简单的以登录为例,来实现整个的流程。话不多说,先来看看效果图

    教你如何用代码实行网络交互_Android_互联网_web开发_课课家交互2

      一、通用类的编写

      那么我们必须检查以下的问题,在代码的输入中需要保持网络的畅通,无论你在手机的后台做什么操作,我们都都需要使得网络处于正常的连接状态,和发送数据的报告,但是当在交互中难免会出现交互的模板时候出现的一些网络异常,那么我们需要在这一步上添加一个通用的呼叫服务类。

      代码如下:

      ***********海曼在2015/6/11。*/公共类的呼叫服务{/***检查网络连接之前叫*@param背景*归*/私有静态布尔CheckNet(语境){connectivitymanager连接=(connectivitymanager)背景。getSystemService(上下文。connectivity_service);如果(连接!=null){//获取网络连接管理的对象networkinfo信息=连接。getactivenetworkinfo();如果(信息!=null&&信息。isconnected()){//判断当前网络是否已经连接如果(信息。getstate()==networkinfo。状态。连接){returntrue;}}}returnfalse;}/**电话服务网*@paramurlstringURL*@param内容字符串参数*@返回JSON结果,一系列的JSON*/字符串(字符串调用urlstring,字符串内容,语境){if(!CheckNet(上下文)){returnnull;}试{URL=新的URL(urlstring);你conn=(你)的URL。openconnection();conn.setconnecttimeout(5000);conn.setdooutput(true);conn.setrequestmethod(“后”);conn.setrequestproperty(“用户代理”、“Fiddler”);conn.setrequestproperty(“内容型”、“application/json”);conn.setrequestproperty(“字符集”、“UTF-8”);OutputStreamOS=康涅狄格州getoutputstream();操作系统。写(内容。getbytes());操作系统。();int代码=康涅狄格州getresponsecode();如果(代码==200){=是BufferedReader(新的输入StreamReader(康涅狄格州getinputstream(),“UTF-8”));字符串retdata;串responsedata=“”;而((retdata=在。readline())!=null){responsedata+=retdata;},();返回responsedata;}}catch(malformedurlexceptione){如printstacktrace();}catch(unsupportedencodingexceptione){如printstacktrace();}catch(protocolexceptione){如printstacktrace();}catch(IOExceptione){如printstacktrace();}returnnull;}公共静态showneterr(语境){新AlertDialog。生成器(上下文)。settitle(“网络错误”)。setmessage(“网络连接失败,请确认网络连接”)。setpositivebutton(“确定”,新dialoginterface.onclicklistener(){@OverridepublicvoidOnClick(DialogInterfacearg0,intarg1){}})。show();}}

      从上面的测试中我们常常看到一些网络错误的问题,网路连接失败,那么我们又是如何去判断网络连接状态的问题?我们可以通过ConnectivityManager的方法,因为手机的网络方式一个是靠无线网络WiFi,一个是用数据流量,再这里我们到底是用哪一个,哪一个又是网络错误的问题所在。

      我们先去判断网络连接,未连接就直接返回空。否则就使用HttpURLConnection方法向服务器发送请求,再把服务器的返回值返回给调用者。通过对ConnectivityManager的的请求,如果网络未连接那么我们就返回,在网络错误发送方面在把所需要的值反馈给调用者,那么在本类的核心方法call,互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。小巧、快速、功能强大的文本编辑工具,特别适合于开发者进行源码编辑context,

      二、利用Json以及AsyncTask进行交互

      我们都知道,在安卓中进行网络操作等等这些耗时的操作,都不能在主线程(即UI线程中)操作,所以我们利用安卓提供的异步机制AsyncTask来进行网络操作。我们以登录为例:

      代码如下:

      ***********海曼在2015/6/11。*/公开课登录{私有静态字符串urlstring=getserverurl。geturl()+“index.php?R=期/登录”;私有静态字符串标签=“登录”;私人ProgressBar进度;私人语境;字符串的字符串的用户名;密码;公共登录(上下文语境,ProgressBar进度条){这个ProgressBar=进度;this.context=语境;}publicvoid登录(字符串的用户名,密码){日志。我(标签,“叫登录”);这个用户名=用户名;这个密码=密码;新logintask()。execute();}类logintask扩展AsyncTask{@OverridedoInBackground(空字符串…params){JSONObjecttosendsobject=新jsonobject();日志。我(标签,“开始把JSON!”);尝试{//添加帐户信息tosendsobject。把(“用户名”,用户名);tosendsobject。把(“密码”,密码);}catch(jsonexceptione){如printstacktrace();}//改变JSON字符串内容=字符串值(tosendsobject);日志。我(标签,”发送:“+内容);字符串responsedata=呼叫服务。电话(urlstring、内容、背景);如果(responsedata==null||responsedata。等于(“”)){returnnull;}日志。我(标签,”既:“+responsedata);JSONObjectresultobject=null;字符串的结果=空;尝试{resultobject=新jsonob项目(responsedata);结果=resultobject。GetString(“结果”);日志。我(标签,“结果”+结果);}catch(jsonexceptione){如printstacktrace();}返回结果;}{@Overrideprotectedvoidonpreexecute()ProgressBar。setvisibility(观。可见);//显示进度条超。onpreexecute();}@Overrideprotectedvoidonpostexecute(空字符串){ProgressBar。setvisibility(观。消失);//隐藏进度条如果(结果==null){呼叫服务。showneterr(上下文);返回;}干杯。maketext(上下文,“结果”+结果,toast.length_sHORT)。show();/在这里你可以做任何你想要登录后}}}

      用户可以在这个例程的基础上延伸出自己login用户登录程序。在这里我没有对这个程序做过多的延伸,只是增加Webservice验证用户登录的功能,使其成为一个完整的网络用户登录验证的模块程序。在进行操作前,onPreExecute方法显示出ProgressBar,在返回结果后,onPostExecute方法再隐藏ProgressBar。

      然后我们再看doInBackGroud方法,我们创建一个JsonObject对象,再使用键值对的方法类似map传入参数,最后转成String后一起传给服务器。在得到结果后把服务器返回的json形式的字符串转成JsonObject。如果返回的是空,说明连接有问题,就调用通用类的showNetErr方法。我把Log截了图,此前不清楚Json格式的朋友可以管中窥豹:

    log

      jsonarrayjsonarray=新jsonarray(SDF);simpledateformat=新simpledateformat(“YYYY-MM-DDHH:分:秒”);双{(periodpo期:localperiods){//这是一个我自定义的数据结构的listjsonobjectperiodobject=新jsonobject();periodobject.put(“约会”,sdf.format(peroid.getdate()));periodobject.put(“把”,peroid.gettag());periodobject.put(“长”,peroid.getlength());jsonarray.put(periodobject);//把每一个对象转成jsonobject再把每个object放入array},tosendsobject.put(“期”,jsonarray);//添加客户信息tosendsobject.put(“username”、“测试”);}catch(jsonexceptione){e.printstacktrace();}

      总结:面对于通用的方法上我们首先要确保网络是正常的状态,在转码的时候我们要用专业的编辑器来解决,那么我们在这个过程中尽可能的把一些东西调节好,再代码的测试后要一步步的过滤一下,在交互的过程中更多的是关于代码的编写过程,一旦出错就很难实现交互的效果以及一些不必要的产生。

课课家教育

未登录