android之客户端与webservice的json方式交互
Android手机客户端与Web服务器的通信
1.Android手机访问Web服务器大多数中间件技术开发人员熟悉如何用计算机浏览器访问互联网,浏览器的主要作用是给互联网的Web服务器提交数据、验证数据和解析显示数据。
其工作原理是通过Http协议.提交数据用GET或者POST方法,客户端的数据通过浏览器网页提交给web应用服务器,应用服务器通过Web页面接收各种不同类型数据,将数据通过服务器的Servlet子类Http Servlet对象提交给服务器端处理逻辑.服务器逻辑将接收到的数据按照客户端的要求在Web服务器端进行运算,再将运算的结果返回给客户端浏览器进行解析和显示。
这里关键是Web服务器端的Servlet.它是服务器和客户端交互据的服务器端端口,即所有客户端的数据都要通过Servlet提交给Web服务器.所有要返回给客户端的数据都要通过Web服务器端的Servlet响应给客户端。
在实际应用的服务器端,创建Servlet的子类对象HttpServlet (HttpServletRequest和 HttpServletResponse),分别用来接收客户端的数据和将数据返回给客户端。
现在的问题就在Android手机终端.如何能够把客户的数据通过手机界面提交给Web服务器? Android 手机终端访问Web服务器的技术架构是怎样的?又如何能够在手机终端把web服务器响应的数据按照服务器的不同数据类型恢复原型?这就是下面要解决的问题。
1.1 手机客户端向Web应用服务器发送请求信息以实际开发的Android手机终端登录功能为案例介绍如何利用Sun公司提供的 java 数据流和过滤流结合Android提供的API提取Web服务器端不同类型的数据。
1) 首先引用所需要的各种API在Android手机终端开发应用程序时.首先需要利用Google和Sun公司提供的必要类包(API),包括http 通信协议类org.apache.http,*消息类org.apache.http.Message.*数据流类java.io.*android.app.Activity等。
智能手机使用JSON与服务端交互架构思考与实现
智能手机使用JSON与服务端交互架构思考与实现关于喧嚣求静网名:喧嚣求静个人博客:QQ:879081656说明:喧嚣之中求一点宁静,淡泊明志、宁静致远头像就不贴啦,写文章有点不好意思,怕写得不好,到时没脸见各位,哈哈申明:文章引用过网友的图片、博客,在此感谢,若有侵权请联系背景在开发手机客户端APP时,经常会与服务端交换数据。
数据交换接口通常会以XML格式和JSON两种常用格式返回数据,在传统web页面开发中,随着AJAX技术的兴起,JSON作为一种轻量级的数据交换格式,以其易于阅读和编写的优点,被应用到越来越多的项目中,转到手机客户端开发,这就自然而然的优先选择JSON作为与服务端的数据交换。
笔者在一线开发多年,接触到手机客户端和服务端开发,比较常用的数据交换格式即xml和json。
Xml:应用场景是为了兼容旧有系统和跨异构网络,降低接口开发成本,例如:接口是webservice服务接口Json:应用场景基本上是基于http协议开发接口,属于全新开发,接口开发成本稍微高。
为什么实际项目开发中,优先选择使用基于http协议开发接口返回json数据格式呢?1.手机端流量考虑,jsono数据格式相对xml节约流量,流量对于手机可是要用米的啊2.手机端处理性能考虑,基于http协议返回json数据,便于数据处理,速度快服务端架构思考场景一手机端和服务端接口业务描述:手机端用户发起http请求-》web服务器接收请求-》调用接口-》返回处理后的json数据-》手机端接收数据解析-》判断数据的正确性-》处理数据展现返回的json数据{“key”:”value”,……}对于场景一,简单实现了需求上的要求,但没有考虑到数据传输上的安全性问题及服务端处理时,有错误或异常的情况,所以笔都设想出第二种场景场景二手机端和服务端接口业务描述:手机端用户发起https请求-》web服务器接收请求-》调用接口-》返回处理后的json数据-》手机端接收数据解析-》判断数据的正确性-》处理数据展现返回的json数据{“flag”:true,”msg”:”接口成功”,“data”:{“key”:”value”,……}}说明:flag标识处理成功为true,否则为false,msg为处理消息说明,若flag=false,则为友好的错误信息data为数据部分,若flag=false,则为空json串{}服务端架构实现笔者选择的相关技术如下:Web 服务器:tomcat框架:spring mvc配置tomcat 服务器支持httpsSSL协议使用不对称加密技术实现双方之间信息的安全传递。
Android与服务器端数据交互(基于SOAP协议整合
Android与服务器端数据交互(基于SOAP协议整合android+webservice)上一节中我们通过http协议,采用HttpClient向服务器端action 请求数据。
当然调用服务器端方法获取数据并不止这一种。
WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。
我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF 等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP 已经提供了基于android版本的jar包了,那么我们就开始吧:首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包然后新建android项目:并把下载的KSOAP包放在android项目的lib目录下:右键->build path->configure build path--选择Libraries,如图:以下分为七个步骤来调用WebService方法:第一:实例化SoapObject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。
如:View Code//命名空间private static final String serviceNameSpace="";//调用方法(获得支持的城市)private static final String getSupportCity="getSupportCity";//实例化SoapObject对象SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);第二步:假设方法有参数的话,设置调用方法参数request.addProperty("参数名称","参数值");第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):View Code//获得序列化的EnvelopeSoapSerializationEnvelope envelope=new SoapSerializ ationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=request;第四步:注册Envelope,(new MarshalBase64()).register(envelope);第五步:构建传输对象,并指明WSDL文档URL:View Code//请求URLprivate static final String serviceURL="";//Android传输对象AndroidHttpTransport transport=new AndroidHttpTrans port(serviceURL);transport.debug=true;第六步:调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):View Codetransport.call(serviceNameSpace+getWeatherbyCityName, envel ope);第七步:解析返回数据:View Codeif(envelope.getResponse()!=null){return parse(envelope.bodyIn.toString()); }/*************** 解析XML* @param str* @return*/private static List<String> parse(String str){String temp;List<String> list=new ArrayList<String>();if(str!=null && str.length()>0){int start=str.indexOf("string");int end=stIndexOf(";");temp=str.substring(start, end-3);String []test=temp.split(";");for(int i=0;i<test.length;i++){if(i==0){temp=test[i].substring(7);}else{temp=test[i].substring(8);}int index=temp.indexOf(",");list.add(temp.substring(0, index));}}return list;}这样就成功啦。
基于JSON的Android移动终端与PHP及MySQL数据通信
基于JSON的Android移动终端与PHP及MySQL数据通信一、本文概述本文主要研究基于JSON的Android移动终端与PHP及MySQL之间的数据通信。
随着移动互联网的发展,移动终端在数据处理和通信方面的需求日益增长。
针对Android移动终端与远程Web Server的数据通信问题,本文选择JSON作为数据交互的方法。
JSON具有安全、快速、通用且数据通信量小的特点,能够有效提高移动终端与Web Server之间的数据传输效率,减少移动终端的请求响应时间和数据流量。
本文将对Android与PHP、MySQL数据通信的应用进行设计,提供设计思路和主要方法,并通过实验结果证明JSON方法在实际应用中的优越性。
二、基础与移动终端数据交互在现代移动应用开发中,数据交互是应用功能实现的核心。
Android移动终端与服务器之间的数据交互通常通过HTTP协议进行,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁和易读性,在移动终端与服务器间的数据通信中得到了广泛应用。
JSON是一种完全独立于语言的文本格式,但是它的结构非常类似于JavaScript对象表示法。
JSON格式的数据由键值对构成,其中键(key)是字符串,值(value)可以是字符串、数字、数组、布尔值或其他JSON对象。
JSON对象表示为花括号{}包裹的键值对集合,而数组则表示为方括号[]包裹的值的有序集合。
在Android开发中,可以使用org.json库来处理JSON数据。
这个库提供了JSONObject和JSONArray等类来创建和操作JSON对象和数组。
通过这些类,开发者可以轻松地将JSON数据解析为Java对象,或者将Java对象转换为JSON格式的字符串,以便通过网络发送。
请求发送:移动终端通过HTTP请求向服务器发送数据或请求数据。
服务器处理:服务器接收到请求后,使用PHP处理请求,可能需要与MySQL数据库进行交互,获取或存储数据。
利用JSON实现客户端与服务器端通信
2018.04 V 电B 纗程技巧与维护
实用第一/ 智慧密集
Android客户端首先获取用户的位置生成JSON格式的数 据并将数据发送给服务器,服务器解析数据之后根据解 析结果提供的条件对数据库中的数据进行操作获得符合 条件的数据并封装为JSON格式返回至Android客户端。 Android端 通 过 org.json包解析数据并进行U I处理后呈 现 给 用 户 。 在 Android中 JSON数 组 格 式 可 以 用 JSONArray类处理。详细过程如图1 所示。
用 户 通 过 Android客户端完成 实 例 中 的 业 务 时 ,
基金项目:湖北省高等学校2017年省级大学生创新创 业 训 练 计 划 项 目 (No.201710488024)。 作者简介:金 鸣 (1998-),女 ,本科,研究方向:软件 工 程 ;袁 嵩 (1976-),男 ,副教授,研究方向:软件工 程;刘 荣 (1997-),女,本科,研究方向:软件工程。 收稿日期:2018-01-16
由于服务器端和客户端打交道的实际上是JSON协 议 ,而 JSON是跨语言的,所以一方面在服务器端可以 采用多种技术,如 JSP、Java等 ;另一方面,服务器端/ 客户端接口设计好之后,使用任意一种技术的服务器, 使 其 响 应 的 JSON格式可以提供多种客户端使用,如 Android客户端、基 于 JavaScript的网页客户端等[3]。
图 1 Android端与服务器端交互过程
具体代码实现如下: (1) Android端获取用户位置并向服务器端发送 请求; p「ivate B oolean「epo「tAdd「ess () th「ows I〇Exception, NETWo「kException {
Android平台与Web服务数据交互时运用Java反射机制解析数据的研究
Android平台与Web服务数据交互时运用Java反射机制解析数据的研究摘要:在时下流行的Android平台上研究应用Java反射机制,提高开发Android软件的灵活性、可扩展性,使得软件系统具有自适应能力,并在运行时随外部环境的变化而改变自身,实现程序的动态演进。
介绍了反射的概念和Java反射机制,对Android应用程序与Web服务进行的Xml数据交互时。
采用反射机制实现了域对象(Domain Object)信息的动态解析并封装成JavaBean类供应用程序使用,并给出了具体实现方法实例。
关键词:Java反射机制;Xml数据交互;Web服务;Android 平台0 引言随着移动技术的不断发展,Android平台在3G领域持续走红,不少传统Web应用系统逐步向移动应用方面发展。
从而加大了Web应用程序与Android应用程序之间的数据交互。
如何高效地将数据转化成程序可用数据,成为了Android应用与Web 应用之间的关键。
本文在以Xml数据格式交互数据的基础上结合Java反射机制和Android平台的Xml解析器(XmlPullParser),为减少代码的重复和增强代码的复用及提高数据交互的效率进行研究。
1 Java反射机制与Android平台Xml解析1.1 Java反射机制Java反射机制是在运行状态中,动态获取类的信息以及动态调用对象方法的机制。
这个机制允许程序在运行时通过调用Reflection APIs取得任何一个已知名称的Class的内部信息,既包括其修饰符、基类、所实现的接口等,也包括Fields和Methods以及Constructor的所有信息,并可于运行时改变fields 内容或调用methods。
Java反射的实现主要是依赖java. lang. reflect包所提供的类。
其中最经常使用的是如下三个类:(1) java. lang. reflect .Field类Field提供有关类或接口的单个域的信息。
android调用webservice接口获取信息
android调⽤webservice接⼝获取信息我的有⼀篇博客上讲了如何基于CXF搭建webservice,service层的接⼝会被部署到tomcat上,这⼀篇我就讲⼀下如何在安卓中调⽤这些接⼝传递参数。
1.在lib中放⼊ksoap2的jar包并导⼊2.在xml 配置⽂件中加⼊:<!-- 访问⽹络的权限 --><uses-permission android:name="android.permission.INTERNET" />3.接下来就要通过代码调⽤借⼝了String WSDL_URI = "http://localhost:8080/WebService4/getNewIdPort?wsdl";//wsdl 的uriString namespace = "http://services.he.TSD/";//namespaceString methodName = "getNew";//要调⽤的⽅法名称// 创建HttpTransportSE对象HttpTransportSE ht = new HttpTransportSE(WSDL_URI);ht.debug = true;// 使⽤soap1.1协议创建Envelop对象SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// 实例化SoapObject对象SoapObject object = new SoapObject(namespace, methodName);// 设置参数object.addProperty("arg0", "hhh");// 将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息envelope.bodyOut = object;//由于是发送请求,所以是设置bodyOutenvelope.dotNet =false;envelope.setOutputSoapObject(object);try{// 调⽤webServiceht.call(null, envelope);System.out.println("回传的值:"+envelope.getResponse());}catch (Exception e) {e.printStackTrace();String msg=e.getMessage();System.out.println(msg);}4.若webservice接收不到android传来的值:(1)参数名不对(2).net的webservice要将envelope.dotNet =true,否则envelope.dotNet =false5.由于是部署到tomcat上的,为了同处于⼀个⽹段,要⼿机和电脑连⼀个wifi。
android中调用webservice总结
Android调用webservice(.net)总结在做本例中,主要进行了一下几个方面的学习:webservice的学习eclipse环境下搭建androidhttpurlconnection进行客户端与服务器通信方面的学习android端对读取的数据进行解析android端对解析后的数据进行显示的过程下面我们详细讲解这几个方面的过程和遇到的问题webservice的学习开始不懂什么是webservice ,在网上查阅了相关的信息之后,感觉webservice就是提供服务接口的,我们发布一个web服务,别人可以通过各种方式了获取我们服务。
我们只给用户(客户端)服务的说明(地址,需要传递的参数,服务的函数名称等等),用户只需根据相应的要求进行调用即可,相对较透明。
Web服务典型的是使用xml进行通讯,用户提出服务的要求,此要求被封装到一个xml文件中传输到服务器端,然后服务器端进行解析,获得客户端想要的服务信息,然后调用相应的服务接口获得数据,获得的数据封装成xml的数据流然后被传输到客户端,客户端接受到此数据流后应进行相应的解析(android中建议用xmlpull进行解析)。
对webservice暂时了解这些。
下面介绍相关的细节信息。
首先是webservice的创建,vs2010中没有直接创建webservice的项,但是我们可以间接地进行创建(可以选择 Empty Web Site/Application 模板,建立空的Web 网站或项目,在添加新项窗口中,你依然会发现Web Service 这个项模板),从而看出已经不建议使用 Web Services 建立新的服务,WCF 服务应该是新项目的首选(不熟悉嘿嘿)。
创建好webservice以后,我们就可以看到项目中有一个后缀为.xsmx的文件,我们想要的就是这个文件。
[WebService(Namespace = "/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][ponentModel.ToolboxItem(false)]// 若要允许使用 AJAX 从脚本中调用此Web 服t务请取消对下行的注释// [System.Web.Script.Services.ScriptService]public class WebService1 : System.Web.Services.WebService{[WebMethod]public string HelloWorld(){return"Hello World";}}这就是我们创建一个新的webservice后系统自动给我们创建的代码。
基于JSON实现Android智能终端与Web服务器“面向对象”的信息交换
整个对象进 行操作 。
3 基 于 J ON 格 式 的 “ 向 对 象 ” 信 息 交 换 的 实 现 、 S 面
以 实 际 项 目 中An r i客 户 端 向 We 服 务 器 添 加 学 生 功 能 为 d od b 案例介绍如何基于JO S N数 据 格 式 , 用 G o l sn A I 现 “ 使 ogeG o P 实 面 向对 象 ” 信 息 交 换 。 的 31案 例 功 能 描 述 . A d od 户 端 具 有 添 加 学 生 功 能 , 户 通 过 A d od 户 端 n ri客 用 n r i客 Acii 界 面 输入 欲 添 加 学 生 的 属 性 信 息 , 后 单 击 “ 加 ” 钮 将 t t vy 然 添 按 这 些 属 性 信 息 封 装 成 Su e t 象 , 过 G o l Gsn AP将 其 映 td n对 通 o ge o I 射为J ON格 式的文本数 据并 以二进 制流的形式 发送给we 服务 S b 器 , b 务 器 响应 请 求信 息 将 J O We 服 S N格 式 的 数 据 映 射 成 Su e t tdn对 象 , 利 用 数 据 持 久层 技 术 保 存 该 对 象 。 并
32An ri 客 户端和 W e 务 器的 环境 准 备 . dod b服 A d od n r i智能终端作 为we 服务器 的客 户端需要 引入 与We b b 服务器交换 信息 时用 到的Su et 同时A dod tdn 类。 n ri客户端 和we 服 b
务 器 都 需 要 引 入 G o -1 7 1jr 件 。 sn . . . 文 a 33An ri 客 户端 向 W e 服 务 器发 送欲 添 加 的 Su e t . dod b td n 对
Android从服务端获取json解析显示在客户端上面
Android从服务端获取json解析显示在客户端上面首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高;因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet):构造的Json数据如下:[{"name":"张三","address":"北京","age":20},{"name":"李四","address":"上海","age":30}, {"name":"王五","address":"深圳","age":35}][一]服务器端(Person.java省略):①:数据构造JsonService.javapublic class JsonService {public static List<Person> getListPerson() {List<Person> mLists = new ArrayList<Person>();mLists.add(new Person("张三", "北京", 20));mLists.add(new Person("李四", "上海", 30));mLists.add(new Person("王五", "深圳", 35));return mLists;}②:Servlet的代码(包括构造Json数据,没有使用Json数据转换方法)JsonServlet.javapublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();List<Person> persons = JsonService.getListPerson();StringBuffer sb = new StringBuffer();sb.append('[');for (Person person : persons) {sb.append('{').append("\"name\":").append("\""+person.getName()+"\"").append(", "); sb.append("\"address\":").append("\""+person.getAddress()+" \"").append(",");sb.append("\"age\":").append(person.getAge());sb.append('}').append(",");}sb.deleteCharAt(sb.length() - 1);sb.append(']');out.write(new String(sb));out.flush();out.close();}③:部署到Tomact 浏览器输入http://localhost/JsonWeb/JsonServlet直接访问结果如下:[{"name":"张三","address":"北京","age":20},{"name":"李四","address":"上海","age":30}, {"name":"王五","address":"深圳","age":35}]至此服务器端代码编码完成,下面进行客户端代码编写; (二)客户端(Person类,和展示数据的布局文件因为简单省去) ①:获取服务器端的Json数据并且解析的工具类JsonParse.java 必要的需要导入的包省去public class JsonParse {/*** 解析Json数据** @param urlPath* @return mlists* @throws Exception*/public static List<Person> getListPerson(String urlPath) throws Exception {List<Person> mlists = new ArrayList<Person>();byte[] data = readParse(urlPath);JSONArray array = new JSONArray(new String(data));for (int i = 0; i < array.length(); i++) {JSONObject item = array.getJSONObject(i);String name = item.getString("name");String address = item.getString("address");int age = item.getInt("age");mlists.add(new Person(name, address, age));}return mlists;}/*** 从指定的url中获取字节数组** @param urlPath* @return 字节数组* @throws Exception*/public static byte[] readParse(String urlPath) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] data = new byte[1024];int len = 0;URL url = new URL(urlPath);HttpURLConnection conn = (HttpURLConnection) url.openConnection();InputStream inStream = conn.getInputStream();while ((len = inStream.read(data)) != -1) {outStream.write(data, 0, len);}inStream.close();return outStream.toByteArray();}}②:主Activity类public class MainActivity extends Activity {private Button mButton;private ListView mListView;//使用IP不能使用localhost或者127.0.0.1,因为android模拟器默认绑定这个IP,这里应该访问局域网IPprivate static final String urlPath = "http://10.16.31.207/JsonWeb/JsonServlet";private static final String TAG = "MainActivity";private List<Person> persons;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);mButton = (Button) findViewById(R.id.button1);mListView = (ListView) findViewById(R.id.listView1);mButton.setOnClickListener(new MyOnClickListener());}private class MyOnClickListener implements OnClickListener {@Overridepublic void onClick(View v) {try {// 得到Json解析成功之后数据persons = JsonParse.getListPerson(urlPath);List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < persons.size(); i++) {HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", persons.get(i).getName());map.put("address", persons.get(i).getAddress());map.put("age", persons.get(i).getAge());data.add(map);}//初始化适配器,并且绑定数据SimpleAdapter _Adapter = new SimpleAdapter(MainActivity.this, data, yout.listview_item, new String[] { "name", "address", "age" }, new int[] { R.id.textView1,R.id.textView2, R.id.textView3 });mListView.setAdapter(_Adapter);} catch (Exception e) {Toast.makeText(MainActivity.this, "解析失败", 2000).show(); Log.i(TAG, e.toString());}}}至此服务器端和客户端编码介绍,运行a n d r o i d应用结果截图:。
Android中Retrofit2.0直接使用JSON进行数据交互
Android中Retrofit2.0直接使⽤JSON进⾏数据交互之前使⽤Retrofit都是将JSON串转化为POJO对象,针对不同的业务协议,定义相应的接⼝和参数列表。
但是此种⽅式⼀般⽤在⾃⼰内部协议基础上,具体⼤的项⽬中,有些第三⽅的集成功能,⼀般都采⽤统⼀的⽅式即请求JSON和回应JSON进⾏数据交互,不可能每个第三⽅协议都会去定义与协议相应的POJO对象。
HTTP肯定有GET和POST⽅法,先定义Retrofit Api的interface:package work.http;import java.util.Map;import okhttp3.RequestBody;import okhttp3.ResponseBody;import retrofit2.Call;import retrofit2.http.Body;import retrofit2.http.GET;import retrofit2.http.POST;import retrofit2.http.QueryMap;import retrofit2.http.Url;/*** Created by wangyuhang@ on 2017/8/23 0023.*/public interface RetrofitServiceApi {@POSTCall<ResponseBody> reqPost(@Url String url, @Body RequestBody requestBody);@GETCall<ResponseBody> reqGet(@Url String url, @QueryMap Map<String, String> options);@GETCall<ResponseBody> reqGet(@Url String url);}1、POST⽅式,采⽤指定完整的URL,reqeustBody就是后⾯业务要传⼊的完整JSON串2、GET⽅式,后⾯的options就是⼀个Map,业务参数键值就存在这个⾥⾯,URL⾥⾯不需要带值。
android源代码学习基于SOAP协议向WebService交互数据
Android基于SOAP协议向WebService交互数据,修改请求超时时间SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议。
通过第三方提供的架包ksoap2-Android-assembly-2.4-jar-with-dependencies.jar,我们可以向服务器进行请求调用自己需要的服务。
下面以/提供的天气预报web服务为例。
下面是向远处服务器进行请求的详细操作类WebServiceUtilJava代码1publicclassWebServiceUtil{23//命名空间4privatestaticfinalStringNAMESPACE="/";5//WebService地址6privatestaticfinalStringURL="/WebServices /WeatherWebService.asmx?wsdl";7//需要调用的方法名8privatestaticfinalStringgetSupportProvince="getSupportProvince";910/**11*@desc获得洲、国内外省份和城市信息12*@return省份列表13*/14publicListgetAllProvince(){15ListallProvince=newArrayList();1617try{18//1.实例化SoapObject对象19SoapObjectrequest=newSoapObject(NAMESPACE,getSupportProvince);2021//2.如果方法需要参数,设置参数22//request.setProperty("参数名称","参数值");2324//3.设置Soap的请求信息,参数部分为Soap协议的版本号25SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvel ope.VER11);26envelope.bodyOut=request;2728//4.构建传输对象29AndroidHttpTransporttransport=newAndroidHttpTransport(URL);30transport.debug=true;3132//5.访问WebService,第一个参数为命名空间+方法名,第二个参数为Envelope对象33transport.call(NAMESPACE+getSupportProvince,envelope);3435//6.解析返回的数据36SoapObjectresult=(SoapObject)envelope.getResponse();37intcount=result.getPropertyCount();38for(inti=0;i<count;i++){39allProvince.add(result.getProperty(i).toString());40}4142}catch(IOExceptione){43e.printStackTrace();44}catch(XmlPullParserExceptione){45e.printStackTrace();46}47returnallProvince;48}49}使用还是比较简单的,在这我只以天气预报服务中提供的获取省份信息的方法getSupportProvince为例,详细的解释了基于soap协议的访问操作。
Android数据格式解析对象JSON用法
Android数据格式解析对象JSON用法1.JSON概念:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换。
JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。
JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。
比XML 更轻量级,Json使用起来比较轻便和简单。
JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。
2.环境配置/p/google-gson/里有一个名为Gson的类库,可以用它来解析Json数据,并且,Adroid 3.0平台里其实也就是把这一部分直接整合进Android里了。
我们要解析Json数据,直接去网站上下载个jar包,导入到工程里,就可以解析Json数据了。
3.JSON应用(1).JSON是一种轻量级的数据交换格式(2).JSON基于两种数据结构:Object和Array。
其中Object是“名称/值”对的集合。
(3)在Android中包含四个与JSON相关的类和一个Exceptions:a.JSONObject这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。
b.JSONArray它代表一组有序的数值。
将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[value1,value2,value3]c.JSONStringer这个类可以帮助快速和便捷的创建JSONtext。
其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。
每个JSONStringer实体只能对应创建一个JSON text。
例如:String myString = new JSONStringer().object().key("name").value("小猪").endObject().toString();myString ={"name" : "小猪"}d.JSONTokener这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。
Android如何使用WebService接口
Android如何使用W ebService接口在OPhone 中使用KSOAP2调用WebServiceWebService是一种基于SOAP协议的远程调用标准。
通过WebService可以将不同操作系统平台,不同语言、不同技术整合到一起。
在OPhone SDK中并没有提供调用WebService的库,因此,需要使用第三方类库(KSOAP2)来调用WebService。
在本文将介绍在OPhone中调用WebService的具体细节,并在最后给出一个完整的例子来演示如何使用KSOAP2来调用W eb Service。
安装第三方类库:KSOAP2PC版本的WebService客户端类库非常丰富,例如,Axis2、CXF等,但这些类库对于OPhon e系统过于庞大,也未必很容易移植到OPhone系统上。
因此,这些开发包并不在我们考虑的范围内。
适合手机的WebService客户端类库也有一些。
本例使用了比较常用的KSOAP2。
读者可以从如下的地址下载Android版(OPhone SDK1.5也同样适用)的KSOAP2。
/p/ksoap2-android/downloads/list将下载后的jar文件复制到Eclipse工程的lib目录中(如果没有该目录,可以新建一个,当然,也可以放在其他的目录中)。
并在Eclipse工程中引用这个jar包,引用后的Eclipse工程目录结构如图1所示。
图1 引用KSOAP2开发包使用KSOAP2调用WebService读者可按如下6步来调用WebService的方法。
1. 指定WebService的命名空间和调用的方法名,代码如下:SoapObject request = new SoapObject("http://service", "getName");SoapObject类的第1个参数表示WebService的命名空间,可以从WSDL文档中找到WebSer vice的命名空间。
android端与后台webservices通讯接口规范
智能手机移动监控系统WebServices接口规范文件状态:[√ ] 草稿[ ] 正式发布[ ] 正在修改文件标识:当前版本:Version 1.0 作者:完成日期:版本历史版本作者参与者起止日期备注Version 1.0 周平、张涵目录1综述 (4)2名词解释 (4)3全局约定 (4)3.1接口协议 (4)3.2接口输入 (4)3.3接口输出 (4)3.4其它 (5)4接口定义 (5)4.1登陆接口 (5)4.1.1接口地址 (5)4.1.2接口输入 (5)4.1.3接口输出 (5)4.2总体监控 (7)4.2.1实时通话量统计接口 (7)4.2.2当前队列排队数统计接口............................................. 错误!未定义书签。
4.2.3实时坐席状态统计接口 (8)4.2.4当日话务状态接口 (9)4.2.5当日服务质量指标接口 (10)4.2.6当日人工服务分类统计接口 (11)4.2.7当日各渠道服务质量接口 (11)4.3话务曲线 (13)4.3.1服务指标曲线接口 (13)4.3.2当日话务曲线接口 (17)4.3.3当月话务曲线接口......................................................... 错误!未定义书签。
4.4服务器监控 (19)4.4.1服务器运行状态............................................................. 错误!未定义书签。
4.4.2服务器上关键服务工作状态......................................... 错误!未定义书签。
4.4.3服务器资源使用情况..................................................... 错误!未定义书签。
利用JSON实现Android客户端与Web服务器间的数据交互
行访 问。下 面是一个 J a v a S e r i p t 中声 明 J S O N数 据 UI上 对象 的示 例 :
一
通 过 引号 、 逗号 、 冒号 、 大括 号 等符 号 构 建 了 个J S O N对 象 J s o n O b j , 冒号左 边是 键, 右边 是 值。
S O N对 象实 际 上就 是 一个 键 值对 的集 合 . 使 用类 少 缺陷 , 例如: 因为 X M L数据 是 以 D O M 树状 形 式 J s o n O b j . p e r s o n . n a m e的 方式 就可 以方 便 地 访 问 进 行组 织 的,在 实 际应用 中软件 开发 人 员必 须 使 似 J
I f / J s o n 格 、
响应数据
J
” t e l l 1 ・ 1 23 4 56 78 9
陶1 J s o n 数 据 交 互 流 程
2 0 1 3年第 2 期
福
建 电
脑
1 6 7
后, 就可 以在 U I 上 显示 所 有 的联 系人 信 色 、 关 键 首 先 ,在 A n d r o i d客 户 端 上使 用 如 下 代码 以 代码 如下 : G e t 方式 发送 请 求 到 We b服务 器 .请求 得 到所 有 l i s t V i e w=( Hs t V i e w ) t h i s . I d V i e w B y I t l ( R . i d . 1 i s t V i c w ) : Li s t <Pe r s o n >p m’ s o i l s 联 系人 的 信息( 受 篇 幅所 限 , 联 系 人对 应 的 J a v a ~ B e a n类 P e r s 0 n不 作描述 )
Android访问JavaEE部署的Web服务返回的JSON格式数据
Android访问JavaEE部署的Web服务返回的JSON格式数据(湖南铁道冯向科 2016-04)一、部署Web服务1.创建Web服务项目打开MyEclipse,依次选择菜单项“File”、“New”、“Web Service Project”,打开新建Web 服务对话框,如图1所示。
输入项目名,如“MyWebService”。
其余采用默认设置。
单击“Finish”按钮,创建空的Web服务项目。
图1 新建Web服务对话框2.创建JDBC配置文件在MyWebService的src目录下新建名称为“jdbc.properties”的普通文件,文件内容如下:3.引入访问SQL Server和处理JSON数据的jar包“Folder”,(1)在MyEclipse中右击“MyWebService”项目,从快捷菜单中依次选择“New”、在新建文件夹对话框中输入“libs”名称,将在当前项目中新建libs文件夹。
(2)从资源管理器中拖动用于Java访问SQL Server 2008的“sqljdbc4.jar”和Java处理JSON格式数据的7个jar文件到MyWebService项目的libs文件夹中:commons-beanutils-1.7.0.jarcommons-collections-3.2.1.jarcommons-httpclient-3.1.jarcommons-lang-2.3.jarcommons-logging-1.1.1.jarezmorph-1.0.3.jarjson-lib-2.2.3-jdk15.jar将弹出文件操作对话框,如图2所示。
从弹出的文件操作对话框中选择“Copy files”单选钮,单击“OK”按钮,将Android访问Web服务的包添加到当前项目中。
图2 选择文件操作类型4.编写Java类展开MyWebService项目,在src中新增类,设置包名,如类名为“SQLHelper”,包名为“com.mywebservice”,如图3所示。
浅谈Android客户端与服务器的数据交互总结
浅谈Android客户端与服务器的数据交互总结前⾔:本⽂总结了Android客户端与服务器进⾏交互时,采⽤RESTful API +Json的交互⽅式,针对不同的数据形式以及不同的解析⽅法,如有不⾜之处,欢迎指正。
温馨提⽰:本⽂适合有⼀定Android开发经验的⼈阅读,如有疑问,欢迎留⾔讨论。
先了解⼀下相关的基本概念。
1. Android客户端与服务器端通信⽅式通信⽅式主要有HTTP和Socket。
HTTP通信:即使⽤HTTP协议进⾏通信,⼯作原理是客户端向服务器端发送⼀条HTTP请求,服务器收到之后先解析客户端的请求,之后会返回数据给客户端,然后客户端再对这些数据进⾏解析和处理。
HTTP连接采取的是“请求—响应”⽅式,即在请求时建⽴连接通道,当客户端像服务器端发送请求时,服务器端才能向客户端发送数据。
Socket通信:Socket⼜称套接字,在程序内部提供了与外界通信的端⼝,即端⼝通信。
通过建⽴socket连接,可为通信双⽅的数据传输传提供通道。
Socket的主要特点有数据丢失率低,使⽤简单且易于移植。
Socket类似于peer to peer的连接,⼀⽅可随时向另⼀⽅喊话。
⼩结:HTTP和Socket都是基于TCP协议的。
使⽤两种通信⽅式的情况是:1.使⽤HTTP的情况:双⽅不需要时刻保持连接在线,⽐如客户端资源的获取、⽂件上传等。
2.使⽤UDP的情况:⼤部分即时通讯应⽤(QQ、微信)、聊天室、苹果APNs等。
2. Android客户端与服务器的数据交互⽅式主要有三种:数据流从web服务器响应到⼿机终端的数据⼀般打包在⼀个字节数组中,这个字节数据中包含了不同的数据类型,客端端采取Java 数据流和过虑流的⽅式从字节数组中取出各种类型的数据。
这种交互⽅式我在学习Android之初⽤过,实际项⽬中并没有发现哪家公司在⽤。
这种⽅式了扩展了Android平台在访问Web 服务器进⾏交互时的解析数据能⼒,仅供研究学习。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
写成json格式就是这样:
[ {"城市":"北京","面积":16800,"人口":1600}, {"城市":"上海","面积":6400,"人口":1800}
nnnnnnnnn //Like 是 JSONObject nnnnnnnnn "\"Like\" : {"+ nnnnnnnnnnn "\"Name\" : \"加内特\","+ nnnnnnnnnnn "\"Height\" : \"2.11cm\","+ nnnnnnnnnnn "\"Age\" : 35"+ nnnnnnnnn "},"+ nnnnnnn nnnnnnnnn //LikeList 就是一个 JSONObject nnnnnnnnn "\"LikeList\":" + nnnnnnnnnnnnn "{\"List\": " + nnnnnnnnnnnnn "["+ nnnnnnnnnnnnnnnnnnn //这里也是JSONObject nnnnnnnnnnnnnnnnn "{"+ nnnnnnnnnnnnnnnnnnn "\"Name\" : \"Rose\","+ nnnnnnnnnnnnnnnnnnn "\"Height\" : \"190cm\","+ nnnnnnnnnnnnnnnnnnn "\"Age\" : 23"+ nnnnnnnnnnnnnnnnn "},"+ nnnnnnnnnnnnnnnnn //这里也是JSONObject nnnnnnnnnnnnnnnnn "{"+ nnnnnnnnnnnnnnnnnnn "\"Name\" : \"科比\","+ nnnnnnnnnnnnnnnnnnn "\"Height\" : \"198cm\","+ nnnnnnnnnnnnnnnnnnn "\"Age\" : 33"+ nnnnnnnnnnnnnnnnn "}"+ nnnnnnnnnnnnn "]"+ nnnnnnnnnnnnn "}"+ nnnnnnnnn "}"; nnnnnnn nnnnnnn try { nnnnnnnnnnn JSONObject dataJson = new JSONObject(str); nnnnnnnnnnn Log.d(TAG, dataJson.getString("日期")); nnnnnnnnnnn nnnnnnnnnnn JSONObject nbaJson = dataJson.getJSONObject("Like"); nnnnnnn nnnnnnnnnnn Log.d(TAG, nbaJson.getString("Name")); nnnnnnnnnnn Log.d(TAG, nbaJson.getString("Height")); nnnnnnnnnnn Log.d(TAG, nbaJson.get("Age").toString()); nnnnnnnnnnn nnnnnnnnnnn JSONObject listJson = dataJson.getJSONObject("LikeList"); nnnnnnnnnnn JSONArray arrayJson = listJson.getJSONArray("List"); nnnnnnnnnnn nnnnnnnnnnn for(int i=0;i<arrayJson.length();i++) { nnnnnnnnnnnnnnn nnnnnnnnnnnnnnn JSONObject tempJson = arrayJson.optJSONObject(i); nnnnnnnnnnnnnnn nnnnnnnnnnnnnnn Log.d(TAG, tempJson.getString("Name")); nnnnnnnnnnnnnnn Log.d(TAG, tempJson.getString("Height")); nnnnnnnnnnnnnnn Log.d(TAG, tempJson.getString("Age").toString());nnn nnnnnnnnnnn } nnnnnnnnnnn nnnnnnnnnnn nnnnnnn } catch (JSONException e) { nnnnnnnnnnn System.out.println("Something wrong..."); nnnnnnnnnnn e.printStackTrace(); nnnnnnn } nnn } }
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升 级,因为该规定的都规定了。
1) 并列的数据之间用逗号(",")分隔。
2) 映射用冒号(":")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
android之客户端与webservice的json方式交互
数据传输量 同等的数据,Json需要传输的数据更少,xml会相对多些,对关注数据量的机器来说,这点比较关键。
扩展性, 虽然xml打着可扩展的名号,但是还没有xml可以扩展,json不可以扩展的。
编码难度 xml跨平台对接更容易出问题,虽然工具很多,但是想在跨平台轻易的调通就不是很容易,而json手工就能写出 来,编码就简单很多。
json是轻量级的,它易于使用,并且容易转换到Java对象;并且客户端脚本js容易获取,Android已经支持JSON 的标准库。 xml一般用在数据量很大的情况下或者数据结构复杂的时候一般用xml
在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。
本文获取web项目返回的JSON数据。Android应用解析JSON比XML性能要好,但有许多项目仍然采用的是XML。
json:
21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。当时通用的数据交 换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是 Json。
]
如果事先知道数据的结构,上面的写法还可以进一步简化:
[ ["北京",16800,1600], ["上海",6400,1800]
]
java 定义示例:
n private String jsonData1="[{\"name\":\"renhaili\",\"age\":20}, {\"name\":\"zhouxiaodong\",\"age\":21}]"; n private String jsonData2="{\"name\":\"xiong\",\"age\":18}";
由此可以看到,json非常易学易用。所以,在短短几年中,它就取代xml,成为了互联网上最受欢迎的数据交换 格式。
第一种方便简单:
最近在用Android调用Web服务,开始准备用WebService来调用,用jws的WebService方式写好后发现Android调 用的时候很多问题不知道咋解决了,后来发现有一个更好的办法,就是采用HttpPost来与后台交互。
下面就说一下相关的JSON的操作:
不得不说,JSON 格式的确是非常美妙的,速度快而且简化了很多操作 在 Android 下,Android SDK 已经为我们封装好了整个与 JSON 有关的操作,使用非常方便
以下就是一个标准的 JSON 请求的实现过程:
HttpPost request = new HttpPost(url); // 先封装一个 JSON 对象 JSONObject param = new JSONObject(); param.put("name", "rarnu"); param.put("password", "123456"); // 绑定到请求 Entry StringEntity se = new StringEntity(param.toString()); request.setEntity(se); // 发送请求 HttpResponse httpResponse = new DefaultHttpClient().execute(request); // 得到应答的字符串,这也是一个 JSON 格式保存的数据 String retSrc = EntityUtils.toString(httpResponse.getEntity()); // 生成 JSON 对象 JSONObject result = new JSONObject( retSrc); String token = result.get("token");