`
在下个路口
  • 浏览: 109706 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

数据交互中的各种异步处理

阅读更多
   终于学习到网络交互这一块了,近期做的这个项目,是关于一个旅游的,其中包括web端,Android端,服务端,这三部分的代码都是得自己敲的。感觉这里面最重要的就是关于服务端和客户端的数据交互这一块了,如何向服务端发送请求,服务端又如何发送数据到客户端,那么,关于这方面我用的最多的就是各种异步处理的了吧!


      Android端:
           其实这种异步有了各种可用的库之后已经不那么难了,在这里我是用了android-async-http-1.4.4.jar包,在项目中添加这个包,之后发送请求就简单了。直接上代码:
      发送请求前的准备工作是把服务端要的东西我先保存起来,还有要用什么把这些东西给运过去,
AsyncHttpClient asynClient=new AsyncHttpClient();
					 RequestParams rp=new RequestParams();
					 //得到点击项的用户的id    传给服务器作为要添加的朋友id
				      rp.put("addFriId",v.getTag()+"");
				      ApplicationUtil mApp=(ApplicationUtil) ct.getApplicationContext();
					  Object useId=mApp.map.get("userId");
				       rp.put("userId", useId);
  
     很关键的几句代码是创建AsyncHttpClient 对象,它是司机,由它开着车,把RequestParams 对象这个装载着货物的车开到服务端。而这个货物就是客户端向服务端发送请求时需要发送的参数,RequestParams 存放参数和map相似,是以键值对的方式存放的,所以在服务端可以通过key值得到value了,很方便。ApplicationUtil 是我项目中用来得到用户id的,视自己的项目而定。
    接下来万事具备,只欠东风了,开始发送:
asynClient.post(Config.ADD_FRIEND, rp, new JsonHttpResponseHandler(){
						public void onSuccess(JSONObject response) {
							super.onSuccess(response);
			//接受服务端返回的数据										}
				     });
asynClient.post这个方法三个参数,第一个是要请求的路径,第二个是存放要传给服务端的参数的RequestParams 对象,就是上面创建的那个。onSuccess是一个回调函数,服务端发送数据过来后,客户端在这个方法里面接受数据。与它相等的还有一个onSuccess(JSONOArray response)函数,服务端是以一个json形式返回数据的额,这里面又包括json数据的解析了,这里就不多说了。返回的json是对象,还是数组就具体的去实现它的哪个回调函数。
        异步任务请求图片:
             先上代码再解释。//异步加载图片
class  DownImageAsync extends AsyncTask<String, Void, Bitmap>{
		 private ImageView img;
		public DownImageAsync(ImageView img){
			  this.img=img;
		  }
		       Bitmap bitmap=null;
				protected Bitmap doInBackground(String... u) {
					try {
						URL url=new URL(u[0]);
						try {
							InputStream is = url.openConnection().getInputStream();
							bitmap=BitmapFactory.decodeStream(is);
						} catch (IOException e) {
							e.printStackTrace();
						}
					} catch (MalformedURLException e) {
						e.printStackTrace();
					}
					return bitmap;
				}
				protected void onPostExecute(Bitmap result) {
					super.onPostExecute(result);
					img.setImageBitmap(result);
					
				}
				
			}

   自定义一个类继承AsyncTask类,继承后重写它的几个方法,doInBackground()请求,onPostExecute()请求完成后执行,还有一个方法是请求前执行的额,我们可以在自己项目中做相应的事。值得一提的是doInBackground()方法中的几个参数,是可以自己定义的,在这里我是第一个是请求的路径,第二个不需要,第三个返回的结果是一个bitmap。    String... u这种写法表示该方法的参数是不定的,URL url=new URL(u[0])这是表示该方法中几个参数中的第一个参数。接下来就是执行了:new
DownImageAsync(holder.icon).execute(Config.DOWOLOAD_ICON+map.get("icon"));
  这里我在继承AsyncTask的类中添加了一个构造函数,这是我自己项目的需要。


     web端:
          web端异步请求主要是在web前端,用异步请求达到刷新局部页面的效果。用js代码实现。
   
  <script  type="text/javascript">
               var xmlhttp;
		if(window.XMLHttpRequest){
			xmlhttp=new XMLHttpRequest();
		}else{
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		
		
		function doAsyncTask(method,url,params,fun){
			xmlhttp.open(method, url, true,fun);
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			xmlhttp.send(params);
			xmlhttp.onreadystatechange=fun;
		}


		function loadData(){
		    var params="fromWeb";
			doAsyncTask("POST","/TravelMVC/DynamicNoteAction.action?opreation=dynamicList",params,reponseHandle);
		}
		function reponseHandle(){
			if(xmlhttp.status==200&&xmlhttp.readyState==4){
				//大小写要区分
			    //alert(xmlhttp.responseText);
			   /*需要将对应div属性重新显示 */
			  	document.getElementById("response").style.display="inline";
				document.getElementById("edit_box").style.display="none";
				document.getElementById("myFriend").style.display="none";
				document.getElementById("response").innerHTML=xmlhttp.responseText;
			}	
		}
</script>

这里主要是利用xmlhttp这个对象。
if(window.XMLHttpRequest){
			xmlhttp=new XMLHttpRequest();
		}else{
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
这个判断是用来兼容不同的浏览器,因为像ie5,ie6是不支持window.XMLHttpRequest的,但是就目前而言,用window.XMLHttpRequest就可以满足了。需要提到几个重要的方法,xmlhttp.open(method, url, fun);  method为提交的方法,如果提交的方法是post的话,需要添加xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
这句话。url为请求的路径,fun为回调函数。回调函数中xmlhttp.status==200为状态码;
xmlhttp.readyState有几种状态,从 0 到 4 发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪


    以上就是用到的几种异步处理的例子。在实在的项目里是非常实用的,而且也非常方便使用。
分享到:
评论

相关推荐

    异步fifo数据交互处理

    异步fifo数据交互处理

    前后端数据交互ajax ,包括原生js的ajax,以及jquery中的ajax的使用(一)

    一、初识 ajax ajax 是Asynchronous Javascript And XML四个单词的简写,粗略翻译为:异步的Javascript 和 ...XML用来存放数据,前端用XML的格式发送数据给后端,后端也发送XML格式数据给前端,前段也好处理(相当于中

    java 大数据处理 入门

    这是在processing中写的鼠标交互的信息可视化,使用的语言是Java。也可以把这个程序移植到其他平台

    基于FPGA的同步fifo设计。

    FIFO (First-In-First-Out) 是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写...异步FIFO的写时钟和读时钟为异步时钟,FIFO内部的写逻辑和读逻辑的交互需要异步处理,异步FIFO常用于跨时钟域交互。 ​

    计算机毕业设计 - Android模仿易网新闻页面源码(异步加载),保证可靠运行,计算机毕业生可参考,免费资源下载

    加载状态与错误处理:在数据加载过程中显示加载状态,如进度条;当加载失败时,展示错误提示并提供重试机制。 图片异步加载:使用Glide或Picasso等图片加载库异步加载新闻图片,提高页面加载速度,并优化图片显示...

    数据中台之结构化大数据存储设计.doc

    队列:用于将数据处理流程异步化,衔接上下游对数据进行实时交换。异构数据存储 之间进行上下游对接的核心组件,例如数据库系统与缓存系统或搜索系统间的数据 对接。也用于数据的实时提取,在线存储到离线存储的...

    基于Python Django框架的jQuery AJAX交互源码实现

    通过使用POST和GET请求,实现了数据的异步处理。项目主要采用Python语言编写,同时包含了JavaScript、HTML、Shell、CSS及TypeScript等多种开发语言,以丰富项目的功能和交互体验。 文件结构:项目共计277个文件,...

    医疗信息化数据中台(人工智能健康一体化平台).pptx

    事件形式的处理流程 发起 业务处理 数据完整性检查 存储 确认存储 事件处理 异步事件流 异步处理 事件面板 医疗信息化数据中台(人工智能健康一体化平台)全文共22页,当前为第6页。 事件类的数据中台架构 HIS 电子...

    C#基于异步事件回调多线程容器

    多线程应该采用消息中心来交换数据,这样就规避了线程同步交互,等待,阻塞等等,全部是异步调用,全部是接收消息工作,然后产生消息,线程间没有耦合,消息中心有很多成熟的方案如RabbitMQ, Redis(里面有简单的...

    React与安卓activity交互

    React 与安卓交互 通过startActivityForResult启动Activity,获取Activity Result值回调信息。...忘记写注释了,在java里通过Promise.resolve(result)异步回调给js界面,js里面只要.then(..)接收并处理数据,详情请代码

    JavaScript 异步时序问题

    场景 死后我们必升天堂,因为活时我们已在地狱。 不知你是否遇到过,向后台发送了多次异步请求,结果最后显示的数据却并不正确 – 是旧的数据。 具体情况: ...用户与 UI 交互,触发事件及其对应的处理函

    JS的Ajax与后端交互数据的实例

    JS中很多地方会使用Ajax与后台进行数据交互。 Ajax是通过http,使得JS与后端进行数据通信,由于Ajax的异步特性,可以使多个Ajax请求同时访问后端,对页面的局部数据进行逻辑处理,并渲染。 ajax中前端和后端的交互图...

    Ajax+HTML+ASHX实现文件异步上传

    这个压缩包附带的是文件上传的源码,没有使用插件或者控件,纯html+js配合ashx一般处理程序,应用ajax异步交互数据实现上传,可以参考学习使用!

    H2003032068-胡州明-SMART系统-系统框架设计与开发

    其中使用XHML和CSS作为标准化的呈现,使用XMLHttpRequest作为异步数据的读取,使用JavaScript绑定和处理所有数据。 在AJAX提出之前,业界对于上述技术都只是单独的使用,没有综合使用,也是由于之前的技术需求所决定...

    Flex 的 Adobe AIR快速入门

    异步处理本地 SQL 数据库 同步处理本地 SQL 数据库 处理窗口和菜单 控制窗口的显示顺序 创建透明窗口应用程序 创建可调整大小的非矩形窗口 创建片段式窗口 自定义窗口的外观 与窗口交互 启动原有窗口 测量...

    Swop:Swop是一个用于与客户端进行数据交互的小型库

    swop 是一个用于JavaScript与客户端进行数据交互应用程序,他提供了简洁的api来帮助开发者来做这些事情。 swop 的来源   在我们与客户端交互的时候,大量的数据散落在项目各个文件,或者集中于繁琐的redux和window...

    Node.js异步处理CPU密集型任务的新思路

    当碰到CPU密集型任务时,比如要对数据加解密(node.bcrypt.js),数据压缩和解压(node-tar),或者要根据用户的身份对图片做些个性化处理,在这些场景下,主线程致力于做复杂的CPU计算,I/O请求队列中的任务就被...

    c#中Winform实现多线程异步更新UI(进度及状态信息)

    在c#中使用多线程很方便只需要使用System.Threading.Thread的一个实例的Start方法就行了,但是如何实现多线程之间的交互就不是那么简单。本文实现了用子线程去处理数据,并实时更新主线程的ui状态了。下面就开始一...

    北京中科信软 Visual Basic.NET培训

    ADO.NET中的异步处理 事务处理机制 LINQ 案例分析:采用N层架构和分布式的大型图书系统 四 Web应用(ASP.NET&XML; WebService ASP.NET 页面控制机制及编译模型,页面周期,常用控件,自定义控件,用户控件 ...

Global site tag (gtag.js) - Google Analytics