`
在下个路口
  • 浏览: 111555 次
  • 性别: 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: 请求已完成,且响应已就绪


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

相关推荐

    pb-异步处理

    在描述中提到的“PB通过异步处理实现伪多线程取数”,意味着这个小工具利用了PowerBuilder的异步特性来优化数据检索,尤其是在处理大量数据时,避免阻塞用户界面。尽管它不是真正的多线程(因为PowerBuilder自身不...

    layui异步加载table表中某一列数据的例子

    在本篇文章中,介绍了如何利用layui框架实现异步加载table表中某一列数据的示例。layui是一个轻量级的前端UI框架...在实际开发过程中,通过合理的使用layui框架提供的各种接口,可以有效地实现各种复杂的界面交互需求。

    jQuery中异步交互技术详细指南

    除了`jQuery.ajax()`之外,jQuery还提供了一些简化版的函数,如`jQuery.get()`、`jQuery.post()`以及用于处理JSON数据的`jQuery.getJSON()`等,这些函数对于常见的异步数据交互场景非常有用。 #### 参数详解 `...

    Jquery异步交互

    在jQuery中,异步交互主要依赖于AJAX(Asynchronous JavaScript and XML)技术,允许页面在不刷新的情况下与服务器交换数据并更新部分网页内容。本文将深入探讨jQuery中的异步交互,特别是`jQuery.ajax()`方法及其...

    网络游戏-一种用于机载数据网络异步数据交互区的缓冲管理方法.zip

    本文将详细探讨标题“网络游戏-一种用于机载数据网络异步数据交互区的缓冲管理方法”所涵盖的关键知识点。 首先,我们要理解“机载数据网络”。在航空领域,机载数据网络是飞机内部通信的核心,负责飞机各系统之间...

    详谈 Jquery Ajax异步处理Json数据.

    1. Ajax与异步处理概念:异步处理指的是前台页面的JavaScript能够调用后台方法,而不需要刷新页面即可与服务器交互数据,这一技术改变了传统网页必须通过刷新才能提交数据、接收结果的交互方式。Ajax(Asynchronous ...

    ECharts前台后台数据交互Demo

    在ECharts与后台数据交互中,AJAX起到了关键的角色。 三、ECharts与MySQL数据交互步骤 1. **创建数据库连接**:首先,我们需要在后台代码中建立与MySQL数据库的连接。这通常使用PHP、Python、Java等后端语言实现,...

    jQuery+json异步实现JSP和struts2之间的数据传递

    "jQuery+json异步实现JSP和struts2之间的数据传递"是一个典型的应用场景,它结合了前端JavaScript库jQuery与后端MVC框架Struts2,通过JSON这种轻量级的数据交换格式进行高效的数据交互。下面我们将详细探讨这一主题...

    javaEE 异步消息处理

    3. **生产者与消费者模型**:在JavaEE异步消息处理中,客户端作为消息的生产者,将消息发送到队列;服务端作为消费者,从队列中接收并处理这些消息。这种模式使得生产者和消费者可以独立工作,提高了系统的并发性。 ...

    异步数据同步组件

    异步数据同步组件是一种在分布式信息系统中实现数据高效流通的技术,它确保了业务系统的完整性和数据传输的可靠性。这一组件涉及到多个关键领域,包括数据循环、分布式系统架构、异步数据传输、数据同步的四个阶段、...

    AS3+JAVA网游开发数据交互源码.rar

    在网络游戏开发中,数据交互是核心部分,它涉及到游戏服务器与客户端之间的通信,确保游戏的实时性和稳定性。这个“AS3+JAVA网游开发数据交互源码”提供了使用ActionScript 3(AS3)和Java这两种语言进行网络数据...

    mysql 异步处理封装lib

    在本项目中,MySQL异步处理库对数据库操作进行了封装,使得开发者无需关注底层细节,只需调用预定义的API即可进行数据库交互。 4. **C#编程**:本项目基于C#语言,它是.NET Framework的主要开发语言。VS2013...

    webService异步处理

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方式,而Web Service异步处理则是一种优化性能和提高系统响应速度的技术。本主题将深入探讨Web Service异步处理的核心概念、实现方式以及相关代码示例。 首先...

    VB6Get和POST请求异步处理请求

    为了解决这个问题,我们可以采用异步处理请求的方式。 首先,让我们了解一下GET和POST的区别。GET方法是向服务器发送一个查询,通常用于获取资源,例如网页、图片等。它将参数附加到URL上,因此请求的数据量有限,...

    Servlet3.0 异步处理 页面推送 Comet 实例

    Servlet3.0是Java EE平台中的一个重要更新,它引入了许多新特性,其中一项重大改进就是对异步处理的支持。这项特性使得服务器可以处理长时间运行的任务,而不会阻塞其他请求,提高了系统的响应能力和效率。本实例...

    Android客户端与服务器端的json数据交互(内含大量知识点)

    在Android应用开发中,客户端与服务器端的数据交互是不可或缺的一部分,JSON作为一种轻量级的数据交换格式,被广泛用于Android和服务器之间的通信。本主题将深入探讨Android客户端如何使用JSON进行数据交互,包括...

    异步窗体显示数据

    在Windows Forms或WPF等UI框架中,这通常通过事件处理、回调函数、任务(Task)或者异步方法来实现。例如,`async/await`关键字在C#中被广泛用于异步操作,使得代码易于理解和维护。 在描述中提到的“窗体显示数据...

    服务器数据交互

    在IT行业中,"服务器数据交互"是一个至关重要的概念,它涉及到客户端(如手机、电脑等设备)与服务器之间的信息交换。这种交互是网络应用的基础,包括网页浏览、在线购物、社交媒体、移动应用等诸多场景。本篇文章将...

    .NET页面前后台数据的交互

    在.NET开发中,页面前后台的数据交互是Web应用程序的核心部分,它涉及到客户端浏览器与服务器端应用之间的信息交换。本文将详细探讨几种常见的交互方式,帮助开发者理解和掌握如何有效地传递参数和调用方法。 首先...

Global site tag (gtag.js) - Google Analytics