Android云端应用主讲:关东升什么是云计算随着3G时代到来,移动互联网是Internet下一个热点,在其中,庞大的计算机系统(本地网络)可以为位于全世界任何可以使用卫星天线的位置的大量微型终端提供服务。这种配置的无线远程特点即被称为云。云与端就像云到处移动和随风变化那样,这些微型手持设备的操作模式也是如此—终端变得越来越小,功能越来越强,可移植性增强了许多,服务器的功能也越加强大,通过软件虚拟化并根据使用收费,能更好地满足用户的数据需求。Android开源的Android操作系统已经席卷全球,它允许您在任何位置运行复杂的云计算应用程序。它设计用于在电池供电设备(如T-MobileG1智能电话)上高效工作,Android本质上就是Linux®,Android编程模型有多个层,允许创建为云计算量身定做的安全应用程序。使用Android达到新的高度并体验前所未有的移动计算吧。云与端应用云与端应用网络通信背景知识JavaIO技术Java网络通信HTTP协议HTMLXMLJavaServlet(JSP)PHP相关技术JavaIO技术,参照《08第8章IO.PPT》Java网络通信,参照《11第11章Java网络编程.PPT》JavaWeb,参照《第7章表示层技术.ppt》Java数据库访问技术(JDBC),参照《第5章数据持久层技术.ppt》实例使用HttpClientjava.net包已经提供了一些基本的HTTP功能。但是使用起来不是很友好。HttpClient是Apache组织提供,已经集成在Android环境中了,他提供了强有利HTTP功能。支持HTTPS协议自动处理Cookie支持多线程=newDefaultHttpClient();HttpGethttpget=newHttpGet(eText.getText().toString());HttpResponseresponse=httpclient.execute(httpget);HttpEntityentityOut=response.getEntity();if(entityOut!=null){BufferedReaderrd=newBufferedReader(newInputStreamReader(entityOut.getContent()));Stringline;StringBuffersb=newStringBuffer();while((line=rd.readLine())!=null){sb.append(line);}text.append(sb.toString());}HttpClient-PostHttpClient可以通过POST方式发送请求,并携带参数。HttpClienthttpclient=newDefaultHttpClient();HttpPosthttppost=newHttpPost(eText.getText().toString());ArrayListBasicNameValuePairnvps=newArrayListBasicNameValuePair();nvps.add(newBasicNameValuePair(fname,tony));nvps.add(newBasicNameValuePair(lname,guan));UrlEncodedFormEntityentityIn=newUrlEncodedFormEntity(nvps,UTF-8);httppost.setEntity(entityIn);HttpResponseresponse=httpclient.execute(httppost);HttpEntityentityOut=response.getEntity();if(entityOut!=null){BufferedReaderbr=newBufferedReader(newInputStreamReader(entityOut.getContent()));……}数据交换格式Web应用程序可以实现下面格式实现数据交换:Plaintext,纯文本XML(eXtensibleMarkupLanguage),可扩展的标记语言。JSON(JavaScriptObjectNotation),是一种轻量级的数据交换格式。XMLXML:extensiblemarkuplanguage,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(documenttypedefinition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。具体的可以问Google或百度。相比之JSON这种轻量级的数据交换格式,XML可以称为重量级的了。JSONJavaScriptObjectNotation是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLanguage,StandardECMA-2623rdEdition-December1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。JSON结构JSON建构于两种结构:“名称/值”对的集合(Acollectionofname/valuepairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hashtable),有键列表(keyedlist),或者关联数组(associativearray)。值的有序列表(Anorderedlistofvalues)。在大部分语言中,它被理解为数组(array)。JSON结构-对象对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。{“name”:“a.htm”,“size”:345,“saved”:true}JSON结构-数组数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。[“text”,“html”,“css”]JSON结构对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。JSON结构-值值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。这些结构可以嵌套。JSON-Example{firstName:John,lastName:Smith,address:{streetAddress:212ndStreet,city:NewYork,state:NY,postalCode:10021},phoneNumbers:[212555-1234,646555-4567]}Java中创建JSON字符串{“name”:”tony”,“age”:30,“a”:[1,3]}JSONObjectjobj=newJSONObject();jobj.put(“name”,“tony”);jobj.put(“age”,30);JSONArrayjarray=newJSONArray();jarray.put(1).put(3);jobj.put(“a”,jarray);returnjobj.toString();JSONinJava下载源代码,编译打成jar包。获得JSON值//stris{name:tony,age:30,a:[1,3]}JSONObjectjobj=newJSONObject(str);StringstrName=jobj.getString(name);//returntonyintnAge=jobj.getInt(age);//return30JSONArrayjarray=jobj.getJSONArray(a);intn1=jarray.getInt(0);//return1intn2=jarray.getInt(1);//return3Google翻译实例{responseData:{translatedText:xxx},responseDetails:null,responseStatus:200}StringstrURL=String.format(=1.0&q=%s&langpair=en%%7Czh-CN,URLEncoder.encode(strEnglish));Log.d(LOG_TAG,strURL);HttpClienthttpclient=newDefaultHttpClient();HttpGethttpget=newHttpGet(strURL);HttpResponseresponse=httpclient.execute(httpget);HttpEntityentityOut=response.getEntity();if(entityOut!=null){BufferedReaderbr=newBufferedReader(newInputStreamReader(entityOut.getContent()));StringBuffersb=newStringBuffer();Stringline;while((line=br.readLine())!=null){sb.append(line);}JSONObjectjson=newJSONObject(sb.toString());JSONObjectjsonResponse=json.getJSONObject(responseData);if(jsonResponse!=null){StringstrChinese=jsonResponse.getString(translatedText);m_edChinese.setText(strChinese);}else{m_edChinese.setText(sb.toString());}}自定义服务器端程序publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(application/json);PrintWriterout=response.getWriter();JSONObjectjobj=newJSONObject();try{jobj.put(name,tony);jobj.put(age,30);JSONArrayjarray=newJSONArray();jarray.put(1).put(3);jobj.put(a,jarray);out.print(jobj.toStrin