android 获取运动数据怎么从服务端获取数据

11052人阅读
转载地址:/smyhvae/p/4004983.html
&这个关于http的内容写的比较好
一、HTTP协议初探:
HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Internet上目前使用最广泛的应用层协议,它基于传输层的TCP协议进行通信,HTTP协议是通用的、无状态的协议。
这几个名词有一种通俗的解释:
通讯协议:双方对话的标准通用的:用了都说好,谁用谁知道无状态的:翻脸不认人超文本:除了文本,还可以是音频、视频
HTTP协议与Android开发之间的关系:
HTTP协议的学习重点:
Http协议基础概念、请求响应模型、提交请求的不同方法、响应状态判断、获取响应以及解析响应、数据下载的实现方法、数据上传的实现方法、请求头详细内容、响应头详细内容等
关于http协议的学习,推荐两个链接:
二、http协议概念:
1、http协议定义:
WWW是以Internet作为传输媒介的一个应用系统,WWW网上基本的传输单位是Web网页。WWW的工作是基于客户机/服务器计算模型,由Web浏览器和Web服务器构成,两者之间采用超文本传输协议HTTP进行通信。
HTTP协议时基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层的协议,是通用的、无状态的面向对象的协议。&
如果要实现网络互联我们要思考两个需要解决的技术问题:
第一:浏览器和服务器是通过什么来连接的。第二:这种连接方式是怎么实现的。
通过Internet去发送到服务器当中,而Internet内部可以通过三种方式来实现发送信息和数据:
第一种:HTTP协议,也是在工作中最常用的,是建立在TCP/IP基础上实现的。第二种:FTP协议第三种:TCP/IP协议,它也是最底层的协议,其它的方式必须是要通过它,但是要想实现这种协议必须要实现socket编程,这种方法是用来上传一些比较大的文件,视频,进行断点续传的操作。
2、客户端连接服务器实现内部的原理如下:
分析上图,步骤如下:
第一步:在浏览器客户端中得到用户输入的内容。&第二步:浏览器得到这个网址之后,内部会将这个域名发送到DNS上,进行域名解析。得到它的IP之后就会链接到指定的服务器上,假如服务器的地址是:221.104.13.32:80,从浏览器到服务器端口它使用到最底层的TCP/IP协议。&第三步:实现TCP/IP协议用Socket来完成,使用了Socket的套接字。&第四步:服务器端的80端口监听客户端的链接,这样客户端到服务器就链接上了。服务器接收到这些内容之后,并按照这些请求的路径找到对应的页面,进一步找到对应的网页内容,返回给客户端。
通俗一点讲,用户在浏览器输入网址,通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JASON。
HTTP返回请求数据的三种方式:
1、以HTML代码内容返回。&2、以XML字符串的形式返回,在以后的android开发中这种形式返回数据比较多。&3、以JSON对象形式返回,在网络流量上考虑JSON要比XML方式要好一些,便于解析。
在Android当中,一般使用xml和Json数据解析。
三、使用HTTP协议访问网络:
Android中的WebView控件已经在后台帮我们处理好了发送HTTP请求、接收服务响应、解析返回数据,以及最终的页面展示这几步工作,不过由于它封装得太好了,反而不能直观地看出HTTP协议是如何工作的。因此接下来我们通过手动发送HTTP请求的方式,来更加深入的了解这一过程。
在Android上发送HTTP请求的方式一般有两种:HttpURLConnection和HttpCient。我们先来学习HttpCient。
四、HttpCient:
HttpClient是Apache开源组织提供的HTTP网络访问接口(一个开源的项目),从名字上就可以看出,它是一个简单的HTTP客户端(并不是浏览器),可以发送HTTP请求,接受HTTP响应。但是不会缓存服务器的响应,不能执行HTTP页面中签入嵌入的JS代码,自然也不会对页面内容进行任何解析、处理,这些都是需要开发人员来完成的。
现在Android已经成功集成了HttpClient,所以开发人员在Android项目中可以直接使用HttpClient来想Web站点提交请求以及接受响应,如果使用其他的Java项目,需要引入进相应的Jar包。HttpClient可以在官网上下载。官网链接:
HttpClient其实是一个interface类型,HttpClient封装了对象需要执行的Http请求、身份验证、连接管理和其它特性。既然HttpClient是一个接口,因此无法创建它的实例。从文档上看,HttpClient有三个已知的实现类分别是:AbstractHttpClient, AndroidHttpClient, DefaultHttpClient,会发现有一个专门为Android应用准备的实现类AndroidHttpClient,当然使用常规的DefaultHttpClient也可以实现功能。
从两个类包所有在位置就可以看出区别,AndroidHttpClient定义在android.net.http.AndroidHttpClient包下,属于Android原生的http访问,而DefaultHttpClient定义在org.apache.http.impl.client.DefaultHttpClient包下,属于对apche项目的支持。而AndroidHttpClient没有公开的构造函数,只能通过静态方法newInstance()方法来获得AndroidHttpClient对象。
简单来说,用HttpClient发送请求、接收响应都很简单,只需要五大步骤即可:(要牢记)
创建代表客户端的HttpClient对象。创建代表请求的对象,如果需要发送GET请求,则创建HttpGet对象,如果需要发送POST请求,则创建HttpPost对象。注:对于发送请求的参数,GET和POST使用的方式不同,GET方式可以使用拼接字符串的方式,把参数拼接在URL结尾;POST方式需要使用setEntity(HttpEntity
entity)方法来设置请求参数。
调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法后,将获得服务器返回的HttpResponse对象。服务器发还给我们的数据就在这个HttpResponse相应当中。调用HttpResponse的对应方法获取服务器的响应头、响应内容等。
检查相应状态是否正常。服务器发给客户端的相应,有一个相应码:相应码为200,正常;相应码为404,客户端错误;相应码为505,服务器端错误。获得相应对象当中的数据
五、DefaultHttpClient:
根据上面的五大步骤,我们就拿DefaultHttpClient举例来访问网络。注意这里有一条原则:在主线程中不能访问网络(在android4.0之后的加入的概念)。
【实例】点击按钮,获取百度首页的文本内容
新建工程文件m04_http01。完整版代码如下:
首先是布局文件,虽然比较简单,但还是贴上吧。
activity_main.xml代码如下:
&LinearLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&
tools:context=&.MainActivity& &
android:id=&@+id/button1&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&Send Request& /&
&ScrollView
android:layout_width=&match_parent&
android:layout_height=&match_parent& &
android:id=&@+id/TextView1&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&@string/hello_world& /&
&/ScrollView&
&/LinearLayout&
布局文件中,我们用一个ScrollView来包裹TextView。借助ScrollView控件的话,就可以允许我们一滚动的形式查看屏幕外i的那部分内容。
MainActivity.java的代码如下:(注释比较详细)
1 package com.example.m04_http01;
3 import org.apache.http.HttpE
4 import org.apache.http.HttpR
5 import org.apache.http.client.HttpC
6 import org.apache.http.client.methods.HttpG
7 import org.apache.http.impl.client.DefaultHttpC
8 import org.apache.http.util.EntityU
9 import android.app.A
<span style="color:# import android.os.B
<span style="color:# import android.os.H
<span style="color:# import android.os.M
<span style="color:# import android.view.V
<span style="color:# import android.view.View.OnClickL
<span style="color:# import android.widget.B
<span style="color:# import android.widget.TextV
<span style="color:#
<span style="color:# public class MainActivity extends Activity {
<span style="color:#
<span style="color:#
public static final int SHOW_RESPONSE = 0;
<span style="color:#
<span style="color:#
private Button button_sendR
<span style="color:#
private TextView textView_
<span style="color:#
<span style="color:#
//新建Handler的对象,在这里接收Message,然后更新TextView控件的内容
<span style="color:#
private Handler handler = new Handler() {
<span style="color:#
<span style="color:#
<span style="color:#
public void handleMessage(Message msg) {
<span style="color:#
super.handleMessage(msg);
<span style="color:#
switch (msg.what) {
<span style="color:#
case SHOW_RESPONSE:
<span style="color:#
String response = (String) msg.
<span style="color:#
textView_response.setText(response);
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
protected void onCreate(Bundle savedInstanceState) {
<span style="color:#
super.onCreate(savedInstanceState);
<span style="color:#
setContentView(R.layout.activity_main);
<span style="color:#
textView_response = (TextView)findViewById(R.id.TextView1);
<span style="color:#
button_sendRequest = (Button)findViewById(R.id.button1);
<span style="color:#
<span style="color:#
button_sendRequest.setOnClickListener(new OnClickListener() {
<span style="color:#
<span style="color:#
//点击按钮时,执行sendRequestWithHttpClient()方法里面的线程
<span style="color:#
<span style="color:#
public void onClick(View v) {
<span style="color:#
// TODO Auto-generated method stub
<span style="color:#
sendRequestWithHttpClient();
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
//方法:发送网络请求,获取百度首页的数据。在里面开启线程
<span style="color:#
private void sendRequestWithHttpClient() {
<span style="color:#
new Thread(new Runnable() {
<span style="color:#
<span style="color:#
<span style="color:#
public void run() {
<span style="color:#
//用HttpClient发送请求,分为五步
<span style="color:#
//第一步:创建HttpClient对象
<span style="color:#
HttpClient httpCient = new DefaultHttpClient();
<span style="color:#
//第二步:创建代表请求的对象,参数是访问的服务器地址
<span style="color:#
HttpGet httpGet = new HttpGet(&&);
<span style="color:#
<span style="color:#
<span style="color:#
//第三步:执行请求,获取服务器发还的相应对象
<span style="color:#
HttpResponse httpResponse = httpCient.execute(httpGet);
<span style="color:#
//第四步:检查相应的状态是否正常:检查状态码的&#20540;是200表示正常
<span style="color:#
if (httpResponse.getStatusLine().getStatusCode() == 200) {
<span style="color:#
//第五步:从相应对象当中取出数据,放到entity当中
<span style="color:#
HttpEntity entity = httpResponse.getEntity();
<span style="color:#
String response = EntityUtils.toString(entity,&utf-8&);//将entity当中的数据转换为字符串
<span style="color:#
<span style="color:#
//在子线程中将Message对象发出去
<span style="color:#
Message message = new Message();
<span style="color:#
message.what = SHOW_RESPONSE;
<span style="color:#
message.obj = response.toString();
<span style="color:#
handler.sendMessage(message);
<span style="color:#
<span style="color:#
<span style="color:#
} catch (Exception e) {
<span style="color:#
// TODO Auto-generated catch block
<span style="color:#
e.printStackTrace();
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
}).start();//这个start()方法不要忘记了
<span style="color:#
<span style="color:#
<span style="color:# }
大致流程如下:
这里,我们添加了一个sendRequestWithHttpClient()方法(第63行),并在点击事件中去调用这个方法。在这个方法中,先开启了一个子线程。
69至81行:在子线程中使用HttpClient发出一条HTTP请求,请求的目标地址是百度的首页。
83至87行:为了能让结果在界面上显示出来,将服务器返回的数据放到了Message对象中,并用Handler将Message发出去。
需要注意的是:
第80行的entity就是服务器发还给客户端的数据。
最后要记得在清单文件中声明访问网络的权限:
android:minSdkVersion=&8&
android:targetSdkVersion=&16& /&
&uses-permission android:name=&android.permission.INTERNET&/&
程序运行后,点击按钮,显示结果如下:
服务器返回给我们的就是这种HTML代码,只是通常情况下浏览器都会将这些代码解析成漂亮的网页后再展示出来。
参考链接:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:170674次
积分:1619
积分:1619
排名:第18234名
原创:30篇
转载:32篇
评论:33条
(1)(3)(4)(5)(1)(1)(10)(5)(24)(8)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Android调用.net开发的webService获取服务器上的数据——Android学习网
&&& 安卓开发中如何连接服务器并获取服务器上的数据呢,方法很多,我们现在说一个最简单的也是最常用的方法,Android调用.net开发的WebService获取服务器数据,一定要注意Android客户端和.net开发的服务端的配置,这块要是配置不对,无论如何也是调整不通的,作为Android开发者如果要做这块的功能,必须道.net开发的WebService是怎么样做的,这样才能全面把握,不会出现一些因为参数问题或者说配置问题而出现的无法解决的异常;下面我们看一个例子:
&&& 我做一个通过WebService服务执行一条sql查询语句,查出结果集,并返回json字符串
&&& 首先看一下.net开发webService部分的内容:
&&& 1.新建一网站,创建webService服务,参考代码如下:
&&& [WebService(Namespace = http://192.168.0.150:8080/, Description = "&font color=blue&警告:版权所有,侵权必究,技术支持QQ:(冯)&/font&")]&&& [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]&&& [ponentModel.ToolboxItem(false)]&&& // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。&&& //[System.Web.Script.Services.ScriptService]&&& public class xabrPhoneService : System.Web.Services.WebService&&& {&&&&&&&& [WebMethod(Description = "Author:&font color=blue&XXX&/font&&br/&Function:&font color=blue&执行查询&/font&&br/&Parameter:&font color=blue&sqlstr=sql字符串
&/font&&br/&Return:&font color=blue&返回json字符串&/font&")]&&&&&&& public Object getExeSqlSelectToJson(string sqlstr)&&&&&&& {&&&&&&&&&&&& DataTable dt =&&&&&&&&&&&& dt = new fhh_BLL.FhhBLL().ExeSqlStringSelect(sqlstr);//这里是调用自己写的执行sql语句的一个方法(我的这里是业务逻辑层的调用),这块读者可以替换成自己的执行sql命令的方法&&&&&&&&&&&& return new commMethod().DataTable2Json(dt);//这里是自己写的一个将DataTable转换成json字符串的函数,读者可以把这里替换成自己的方法&&&&&&& }&&& }
&&& 2.发布网站,部署网站,务必确保webService可以正常运行
&&& 其次我们看Android客户端程序如何写,我这里直接写一个类方法,需要的可以参考:
public class Fhh {&&& private static final String NAMESPACE = http://192.168.0.150:8080/; //我这边配置我webService网站的命名空间是这个&&& private static final String URL = http://192.168.0.150:8080/xabrPhoneService. //我这边配置我webService网站的地址是这个&&& public String getSqlSelect(String sqlstr)) throws IOException, XmlPullParserException {&&&&&&& String METHOD_NAME = "getSqlSelect";&&&&&&& SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);&&&&&&& rpc.addProperty("sqlstr", sqlstr);&&&&&&& SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);&&&&&&& envelope.setOutputSoapObject(rpc);&&&&&&& envelope.bodyOut =&&&&&&& envelope.dotNet =&&&&&&& envelope.encodingStyle="UTF-8"; &&&&&&& (new MarshalBase64()).register(envelope);&&&&&&& HttpTransportSE ht = new HttpTransportSE(URL);&&&&&&& ht.debug =&&&&&&& ht.call(NAMESPACE + METHOD_NAME, envelope);&&&&&&& Object detail = envelope.getResponse();&&&&&&& return detail.toString();&&& }}
&&& 以上代码是写的一个函数,可以再需要的地方直接调用(new Fhh().getSqlSelect(sqlstr)),本文是本人在做系统的时候写的,正常运行,读者可以将代码考出测试,希望对广大安卓开发者有所帮助。
本文为Android开发学习网原创/整理,未经允许不得转载,如需转载请联系:
读后点评 感谢支持
&&&&本站安卓版APP正式上线,欢迎下载
本站提供的android教程仅用于android培训,对任何法律问题及风险不承担任何责任 本站部分内容来自网络,如有侵权,请联系本站
广告/友情链接请联系:QQ: Email:
安卓版:&QQ群:后使用快捷导航没有帐号?
怎么获取服务器端返回的数据,服务器端是一个接口。?
服务器端是一个接口,怎么获取服务器端返回的数据?& &
& && &gaha110&&
&&查看完整内容&&
HttpClient httpClient = new DefaultHttpClient();
& & & & & & & & HttpPost post=new HttpPost(url);
& & & & & & & & HttpResponse response =
& & & & & & & & JSONArray array=
& & & & & & & & try {
& & & & & & & & //getHttpConnectionManager().getParams().setConnectionTimeout(11);
& & & & & & & & httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
& & & & & & & & response = httpClient.execute(post);//发送请求
& & & & & & & & int statusCode=response.getStatusLine().getS ...
服务器 ,&&接口&&
post_newreply
//$(\'note_\').focus();
function succeedhandle_vfastpost(url, message, param) {
$(\'vmessage\').value = \'\';
succeedhandle_fastpost(url, message, param);
showCreditPrompt();
var vf_tips = \'#在这里快速回复#\';
$(\'vmessage\').value = vf_
$(\'vmessage\').style.color = \'#CDCDCD\';
$(\'vmessage\').onclick = function() {
if($(\'vmessage\').value==vf_tips) {
$(\'vmessage\').value=\'\';
$(\'vmessage\').style.color=\&#000\&;
$(\'vmessage\').onblur = function() {
if(!$(\'vmessage\').value) {
$(\'vmessage\').value=vf_
$(\'vmessage\').style.color=\&#CDCDCD\&;
$(\'vreplysubmit\').onclick = function() {
if($(\'vmessage\').value == vf_tips) {
等级:ADD.幼儿园
& & & & & & & & HttpClient httpClient = new DefaultHttpClient();
& & & & & & & & HttpPost post=new HttpPost(url);
& & & & & & & & HttpResponse response =
& & & & & & & & JSONArray array=
& & & & & & & & try {
& & & & & & & & //getHttpConnectionManager().getParams().setConnectionTimeout(11);
& & & & & & & & httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
& & & & & & & & response = httpClient.execute(post);//发送请求
& & & & & & & & int statusCode=response.getStatusLine().getStatusCode();
& & & & & & & & System.out.println(&连接状态:&+statusCode);
& & & & & & & & if (statusCode&= 200&&statusCode&400) {//判断请求是否成功
& & & & & & & & & & & & HttpEntity entity = response.getEntity();
& & & & & & & & & & & & String out = EntityUtils.toString(entity, &GBK&);
& & & & & & & & & & & & //out=Base64.encodeToString(out.getBytes(&GBK&) ,Base64.DEFAULT);
& & & & & & & & & & & & System.out.println(&返回结果:&+out);
& & & & & & & & & & & & array = new JSONArray(out);
& & & & & & & & }
& & & & & & & & } catch (Exception e) {
& & & & & & & & & & & & e.printStackTrace();
& & & & & & & & }
& & & & & & & & System.out.println(&array&+array);
等级:ADD.幼儿园
看返回的是什么数据格式& &进行解析 就好了& & json 或者xml解析& &不就拿到你想要的数据了
等级:ADD.小学
看他返回的是什么格式啊
等级:ADD.幼儿园
Android上用HttpClient调用服务器的那个接口,然后拿到响应数据进行解析
等级:ADD.幼儿园
一般来说获取服务端数据流程是这样的:
1,跟服务端开发人员确定服务端接口使用的协议,是http请求还是webservice。根据协议不同你要在手机端使用不同的方式去请求数据。
2,确定服务端返回给你的数据格式,一种是json格式。一种是xml。一般来说就用这两个格式,确定格式之后在你请求服务端数据之后,将返回的数据解析成你想要的格式数据。
这样就能获取你想要的数据了。详情就要跟你服务端人员沟通过之后再去了解要学习http请求还是websevice。以及解析xml或者json的方法
等级:ADD.幼儿园
调用接口获取数据。。解析。。
等级:ADD.幼儿园
一般用json或者xml
等级:ADD.幼儿园
?大姑爷~(^_^)~ 发表于
一般来说获取服务端数据流程是这样的:
1,跟服务端开发人员确定服务端接口使用的协议,是http请求还是webs ...& &
谢谢了,问题已解决了.
等级:ADD.幼儿园
问题已解决了!谢谢各位了!呵呵
1、2、3、4、5、6、7、8、9、10、

我要回帖

更多关于 android获取网络数据 的文章

 

随机推荐