androidclient和站点数据交互的实现(基于Http协议获取数据方法)

androidclient一般不直接訪问站点数据库,而是像浏览器一样发送get或者post请求。然后站点返回client能理解的数据格式,client解析这些数据。显示在界面上。经常使用的数据格式是xml和json。

能够理解client事实上是一个你自定义标记语言的浏览器,一般浏览器能解析的是html+css的数据,而androidclient能解析的是xml和json(或者都不是而是你自定义的火星格式),服务端为了能满足client输出这样的数据格式的需求,不得不专门针对client开发不同于浏览器訪问的接口。

开发一个站点的client你须要:

1.在client模拟get和post请求。请求终于还是通过http协议以url的形式发送

2.在客户单解析server返回的数据

3.在服务端依据请求生成对应的json数据(强烈建议使用json而不是xml。同样字符的json能返回很多其它的实用数据并且解析方便速度快)

java本身的HttpURLConnection类全然能够实现get和post,可是很麻烦。我们还是使用HttpClient这个开源码来实现。

本人总结了android与server之间的交互有两种方式

1.http协议(一般我们都用HttpClient这个开源的项目)基于Http协议获取数据方法。

那我们採取的server端技术为java,框架为Struts2,或者能够有Servlet,又或者可直接从JSP页面中获取数据。

那么,接下来我们便開始这一路程:

首先:编写server端方法,我这里採用的MVC框架是Struts2。目的非常单纯,就是为了以后做个完整的商业项目。技术配备为:android+SSH。当然,篇幅有限。我这里就直接用Strtus2而已。

server端

为了给项目加入Struts2的支持,我们必须导入Struts2的一些类库,例如以下就可以(有些jar包是不必的。可是我们后来扩展可能是要使用到的。就先弄进去):

1: xwork-core-2.2.1.1.jar

2: struts2-core-2.2.1.1.jar

3: commons-logging-1.0.4.jar

4: freemarker-2.3.16.jar

5: ognl-3.0.jar

6: javassist-3.7.ga.jar

7:commons-ileupload.jar 

8:commons-io.jar

9:json-lib-2.1-jdk15.jar  处理JSON格式数据要使用到

10:struts2-json-plugin-2.2.1.1.jar    基于struts2的json插件

以上的jar包。须要放在WebRoot/WEB-INF/lib文件夹下

然后在web.xml文件里敲下:

<?

xml version="1.0" encoding="UTF-8"?

><web-app version="2.5"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- 定义Struts2的核心控制器:FilterDispatcher -->    <filter>       <!-- 定义核心Filter的名称 -->       <filter-name>struts2</filter-name>       <!-- 定义Filter的实现类 -->       <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>    </filter>

<filter-mapping>       <filter-name>struts2</filter-name>       <url-pattern>/*</url-pattern>    </filter-mapping>

<welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>

</web-app>

然后编写struts.xml文件,并放在WebRoot/WEB-INF/lib文件夹下:例如以下代码:

 

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>

<!-- setting encoding,DynamicMethod,language      <constant name="struts.custom.i18n.resources" value="messageResource"></constant>    -->    <constant name="struts.i18n.encoding" value="UTF-8"></constant>    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

<!-- add package here extends="struts-default"-->     <package name="dongzi" extends="json-default"> <!--须要将struts-default改为json-default-->      <!-- setting action -->         <action name="login" class="com.dongzi.action.loginAction" method="login">              <result type="json"></result>  <!--返回值类型设置为json,不设置返回页面-->                </action>      </package>  </struts>

配置好后,我们再依据<action>标签内容来编写action。

方法为method相应的login。类名为loginAction,

注意:包继承为:json-default 。输出结果类型为json

例如以下:

public class loginAction extends ActionSupport implements                          ServletRequestAware,ServletResponseAware {    /**     *      */    private static final long serialVersionUID = 1L;

HttpServletRequest request;    HttpServletResponse response;

public void setServletRequest(HttpServletRequest request) {     this.request=request;    }

public void setServletResponse(HttpServletResponse response) {        this.response=response;    }

public void  login(){          try {             //HttpServletRequest request =ServletActionContext.getRequest();             // HttpServletResponse response=ServletActionContext.getResponse();             this.response.setContentType("text/html;charset=utf-8");             this.response.setCharacterEncoding("UTF-8");                 if(this.request.getParameter("username").equals("123456")){                      this.response.getWriter().write("真的非常奇怪,日本人!");                 }else if(this.request.getParameter("username").equals("zhd")){                     this.response.getWriter().write("没有错,我就是东子哥!

");                 }else{                     this.response.getWriter().write("我就是东子哥!

");                 }

//将要返回的实体对象进行json处理                    //  JSONObject json=JSONObject.fromObject(this.getUsername());                  //输出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}                   //   System.out.println(json);       

//   this.response.getWriter().write(json.toString());            /**               JSONObject json=new JSONObject();                json.put("login", "login");                response.setContentType("text/html;charset=utf-8");               System.out.println(json);               byte[] jsonBytes = json.toString().getBytes("utf-8");               response.setContentLength(jsonBytes.length);               response.getOutputStream().write(jsonBytes);               **/            /**              JSONObject json=new JSONObject();                json.put("login", "login");               byte[] jsonBytes = json.toString().getBytes("utf-8");               response.setContentType("text/html;charset=utf-8");               response.setContentLength(jsonBytes.length);               response.getOutputStream().write(jsonBytes);               response.getOutputStream().flush();               response.getOutputStream().close();                 **/  

} catch (Exception e) {             e.printStackTrace();        }        // return null;    }}

执行查看下:http://localhost:8080/PDAServer/login.action?username=123456 
当然你能够输入其它參数的URL

执行成功。

client:

这里须要注意的是模拟器把自己当成了localhost,以及127.0.0.1了,因此假设基于本地的web项目測试的话。必须改动IP为:10.0.2.2

public class MainActivity extends Activity {    /** Called when the activity is first created. */ //模拟器自己把自己当成localhost了,server应该为10.0.2.2 private static  String url="http://10.0.2.2:8080/PDAServer/login.action";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        getPDAServerData(url);     }

/**     * 请求服务     * @param url     */    private void getPDAServerData(String url){     url+="?username=123456";

HttpClient client=new DefaultHttpClient();     HttpPost request;      try {      request = new HttpPost(new URI(url));   HttpResponse response=client.execute(request);   //推断请求是否成功      if(response.getStatusLine().getStatusCode()==200){       HttpEntity  entity=response.getEntity();    if(entity!=null){    String out=EntityUtils.toString(entity);     new AlertDialog.Builder(this).setMessage(out).create().show();    }      }

}catch (URISyntaxException e) {   e.printStackTrace();  }     catch (ClientProtocolException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  }    } }

=================================================================================================================================
时间: 2024-08-03 06:54:43

androidclient和站点数据交互的实现(基于Http协议获取数据方法)的相关文章

android客户端和网站数据交互的实现(基于Http协议获取数据方法)

android客户端一般不直接访问网站数据库,而是像浏览器一样发送get或者post请求,然后网站返回客户端能理解的数据格式,客户端解析这些数据,显示在界面上,常用的数据格式是xml和json. 可以理解客户端其实是一个你自己定义标记语言的浏览器,一般浏览器能解析的是html+css的数据,而android客户端能解析的是xml和json(或者都不是而是你自己定义的火星格式),服务端为了能满足客户端输出这种数据格式的需求,不得不专门针对客户端开发不同于浏览器访问的接口. 开发一个网站的客户端你需

数据可视化中数据展示效果,基于highcharts的图表数据展示

最近在公司里搞对外的大屏展示,效果需要比较酷炫. 因为只是单纯的数据展示+效果,而且时间比较紧(2天时间基于一个原先的3D地球模型,制作配套十来个页面),采用jquery+highcharts (效果1) (效果2) 上面就是效果图,直接上代码,文件引入这样的问题就不说了 1 render_chart: function (chartid, type) { 2 let chartOption = {}; 3 switch (type) { 4 case "areaspline" : 5

Android与服务器端数据交互(http协议整合struts2+android)

在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 一:基于Http协议获取数据方法.二:基于SAOP协议获取数据方法,三:忘了------- 那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据. 那么,接下来我们便开始这一路程: 首先:编写服务器端

也谈跨域数据交互解决方案

先来句题外话,最开始Ajax应该是用来特指用XMLHttpRequest传输数据这门技术,但就像最近大家把一切web新技术都归到html5名下一样,现在一切异步获取数据的手段都被人称之为Ajax. 由于JavaScript同源策略的存在,跨域数据交互是个老生常谈的话题了.网上相关文章很多,不过随着时间的推移和浏览器的更新,一部分解决方案已经不适用了,同时也出现了一些更好的方法.抛开纯服务器Proxy这种跟前端没什么关系的方案不说,这里简单总结下常见的其他几种方式. JSONP JSONP是最常见

基于MATLAB的多项式数据拟合方法研究-毕业论文

摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立.具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了M

web前后端数据交互

前后端数据交互是每一名web程序员必须熟悉的过程,前后端的数据交互重点在于前端是如何获取后端返回的数据,毕竟后端一般情况下只需要将数据封装到一个jsonMap,然后return就完了.下面通过一个list.js来说明后端是如何将数据传到前端,前端是如何获取数据,并进行数据展示的. /** * 列表方法 * 1.列表页面显示列表内容的div容器ID为list_container * 2.列表页面模板区域textarea的ID为list_template * 3.列表页面显示列表页码下拉框的div容

vue 前后端数据交互问题解决

先在vue项目中配置好路由组件路由 然后写相应组件 2 后端 写接口赔路由 第三  解决跨域问题 处理数据交互 这样前端就拿到了数据 原文地址:https://www.cnblogs.com/tangda/p/10987082.html

PHP与Python进行数据交互

最近,决定在一个项目用tp5进行APP接口开发,用Python做数据分析,然后这就面临一个问题:PHP和Python如何进行数据交互? 思路 我解决此问题的方法是利用了PHP的passthru函数来调用命令运行Python脚本. 实现 在PHP中调用命令运行Python脚本 1 2 3 4 5 6 //php.php <?php $params = "value"; #传递给python脚本的入口参数  $path="python python.py "; /

Zabbix(五):高级应用-web方案、被动监控、基于snmp协议被动监控、proxy配置测试实例

1.web方案 web scenario:web监控方案,web场景: web scenarios指的是监控指定的web站点的资源下载及页面响应时间等数据指标: (1)创建web监控需要先定义一个web scenario(方案): 一个web方案包括一个或多个HTTP请求或步骤(steps) 每次监控都是按照预先定义的步骤的顺序执行: (2)通过web监控方案可以获取到下列信息: 整个web方案中所有步骤的速度和响应时间,以及平均下载速度和平均响应时间: 失败的步骤号 失败的报错信息 (3)在设