`
chenlong_1988
  • 浏览: 185473 次
  • 性别: Icon_minigender_2
社区版块
存档分类

Android中的HTTP通信

阅读更多

Android中的HTTP通信

 

转:http://blog.sina.com.cn/s/blog_6e13876401013hpm.html

(2012-09-08 10:34:09)


自己整理,整理得不好,不喜勿喷!

HTTP通信

HttpURLConnection接口

HTTP超文本传输协议,用于传送WWW方式的数据。HTTP协议采用了请求/响应模式。

Android提供了HTTPURLConnection和HttpClient接口来开发HTTP程序。

HTTP使用最多的就是Get和Post,Get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给服务器。HttpUrlConnection是抽象类,无法直接实例化对象,所以只能够通过URL的openConnection方法获得。

URL url = new URL(“http://www.google.com/”);

HttpURLConnection urlconn = (HttpURlConnection)url.openConneciton();

openConnection只是创建了实例但并没真正的连接操作。

//设置输入(输出)流

urlconn.setDoOutput(true);

urlconn.setDoInput(true);

//设置方式POST

urlconn.setRequestMethod(“POST”);

//POST请求不能使用缓存

urlconn.setUseCaches(false);

//完成连接之后要关闭这个连接

urlconn.disconnect;

 

一般代码

String httpUrl = “http://www.baidu.com”;

String resultData = null;

URL url = null;

try{

         url = new URL(http);

}catch(MalformedException){

 

}

If(url!=null){

         Try{ 

                            //使用HTTPURLConnetion打开连接

                            HttpURLConnetion urlConn = (HttpURLConnetion)url.openConnetion();

                            //得到读取的类容

                            InputStreamReader in = new InputStreamReader(urlconn.getInputStream());

                            BufferReader buffer = new BufferReader(in);

                            String inputLine = null;

                            While((inputLine = buffer.readLine())!=null){

                                     resultData += inputLine;

}

//关闭InputStreamReader

In.close();

//关闭http连接

Urlconn.disconnect();

}

}

用Get方式传递参数很简单,只需加上传递的参数即可。

String httpurl1 = “http://www.baidu.com ?par=abcdefg ”;

?par=abcdefg为传递的参数par

 

由于HttpURLConnection默认使用Get方式,如果我们要像使用Post方式,则只需要setRequestMethod设置

 

主要代码:

//设置POST请求方式

urlconn.setRequestMethod(“POST”);

 

HttpClient接口

HttpClient更适合Android上开发互联网应用。

ClientConnectionManager 接口

ClientConnectionManager是客户端连接管理器接口,主要有以下几个抽象方法。

closeIdleConnections 关闭空闲的连接

releaseConnection 释放一个连接

requestConnection 请求一个新的连接

shutdown 关闭管理器并释放

 

DefaultHttpClient

DefaultHttpClient是默认的一个Http客户端,我们可以使用它创建一个Http连接

代码:

HttpClient httpclient = new DefaultHttpClient();

 

HttpResponse

HttpRespone是一个Http连接响应,当执行一个HTTP连接后,就会 返回一个HttpResponse,可以通过HttpResponse获得一些响应的信息。

请求一个Http连接并获得该请求是否成功的代码:

HttpResponse httpResponse = httpClient.execute(httpRequest());

If(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

                   //连接成功

}

HttpClient中如何使用Get方式获取数据。这里需要使用HttpGet来构建一个Get方式的Http请求,然后通过HttpClient来执 行这个请求,HttpResponse在接收这个请求后给出响应,最后通过 “HttpResponse.getStatusLine().getStatusCode()”来判断请求是否成功并处理。

主要代码:

//http地址

String httpUrl = “http://192.168.0.1:8080/http1.jsp?par=Http Client_android_Get”;

//HttpGet连接对象

HttpGet httpRequest = new HttpGet(httpUrl);

try{

         //获取HttpCilent对象

HttpClient httpClient = new DefaultHttpClient();

//请求HttpClient,取得HttpReponse

HttpResponse httpResponse = httpCilent.execute(httpRequest);

//判断请求

If(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

         String strResult = EntityUtil.toString(httpResponse.getEntity());

}

}catch(ClientProtocolException){}

catch(IOException){}

 

用POST方式与Get方式不一样

需要使用NameValuePair来保存传递的数据的参数,这里可以使用BasicNameValuePair来构造要被传递的参数,然后通过add方法添加到这个参数到NameValuePair中

代码:

//使用NameValuePair来保存要传递的Post参数

List params = new ArrayList();

//添加要传递的参数

Params.add(new BasicNamePair(“par”,”HttpClient_android_Post”));

Post方式需要设置所使用的字符集,最后就和Get方式一样通过HttpClient来请求这个连接,返回响应并处理。

 

关键代码:

//HttpPost连接对象

HttpPost httpRequest = new HttpPost(httpUrl);

List params = new ArrayList();

//添加要传递的参数

Params.add(new BasicNamePair(“par”,”HttpClient_android_Post”));

try{

         //设置字符集

         HttpEntity httpentity = new UrlEncodedFormEntity(params,”gb2312”);

         //请求httpRequest

         httpRequest.setEntity(httpentity);

         //…………..和Get操作一样

}

 

实时更新:

实时更新需要通过一个线程来控制是视图的更新。

例:实现android程序中每隔5秒刷新一次视图。

public class Test_GetOnTimeActivity extends Activity {

         TextView tv ;

         Button btn;

         MyHandler myHandler;

         MyThread myThread;

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        tv = (TextView)findViewById(R.id.textView1);

        btn = (Button)findViewById(R.id.button1);

        btn.setOnClickListener(new Button.OnClickListener(){

 

                            @Override

                            public void onClick(View v) {

                                     refresh();

                            }

 

        });

        myHandler = new MyHandler();

        myThread = new MyThread();

        new Thread(myThread).start();

    }

 

    //刷新网页更新

    private void refresh(){

             String httpUrl = "http://www.sina.com.cn/";

             String resultData = null;

             URL url = null;

             try{

                       url = new URL(httpUrl);

             }catch(MalformedURLException e){

                       e.printStackTrace();

             }

             if(url!=null){

                       try{

                                HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();

                                InputStreamReader in = new InputStreamReader(urlConn.getInputStream());

                                BufferedReader buffer = new BufferedReader(in);

                                String inputLine = null;

                                while((inputLine = buffer.readLine())!=null){

                                         resultData += inputLine+"\n";

                                }

                                in.close();

                                urlConn.disconnect();

                       }catch(IOException e){

                                e.printStackTrace();

                       }

                       if(resultData!=null){

                                tv.setText(resultData);

                                }else{

                                         tv.setText("No data");

                                }

             }

    }

 

    class MyThread implements Runnable{

 

                   @Override

                   public void run() {

                            while(true){

                                     try{

                                               Thread.sleep(5*1000);

                                               myHandler.sendMessage(myHandler.obtainMessage());

                                     }catch(InterruptedException e){

                                               e.printStackTrace();

                                     }

                            }

                   }

    }

 

    class MyHandler extends Handler{

 

                   @Override

                   public void handleMessage(Message msg) {

                            super.handleMessage(msg);

                            refresh();

                   }

 

                   public MyHandler() {

                            super();

                   }

 

    }

}

 

分享到:
评论

相关推荐

    Android中Http通信

    在Android应用开发中,Http通信是连接服务器获取或发送数据的一种常见方式。本文将深入探讨Android平台下如何实现Http通信,以及涉及的相关知识点。 一、HTTP协议基础 HTTP(超文本传输协议)是一种用于分布式、...

    慕课网 Android中的Http通信 笔记及源码

    在Android应用开发中,Http通信是连接服务器获取或发送数据的重要手段。本笔记及源码主要探讨了如何在Android环境中实现Http通信,包括基础理论、常用库的使用以及实际操作中的注意事项。 一、Http通信基础 Http...

    android的Http通信

    在Android开发中,进行HTTP通信是常见的操作,用于与服务器交换数据。HTTP(超文本传输协议)是一种基于TCP/IP通信协议来交换数据的应用层协议,广泛应用于网页浏览、API交互等场景。本教程将深入讲解如何在Android...

    Android网络编程之Http通信

    Android网络编程是移动应用开发中的一个重要组成部分,而Http通信则是网络编程中最常用的协议之一。在Android平台上,我们通常会使用HttpURLConnection或者第三方库如Apache HttpClient和OkHttp等进行Http通信。 1....

    Android中的Http通信

    在Android应用开发中,Http通信是连接服务器获取或发送数据的重要手段。本示例将深入讲解如何使用"GET"和"POST"这两种常见的HTTP请求方法。Android中的Http通信通常涉及网络编程,涉及到Android的权限管理、...

    android http通信demo

    android 当中涉及到网络编程的部分经常会用到http通信,同时android也为我么您提供了HttpUrlConnection接口和HttpClient接口,大大的方便了开发。Http通信又分为两种方式:get和post,get可以uoqu静态页面,传入参数...

    android网络通信方式

    Android 中常用的网络通信方式有 Socket 通信、HTTP 通信等。本文将详细介绍 Socket 通信在 Android 中的应用。 一、Socket 通信 Socket 是一种常用的网络通信方式,用于描述网络上的一个设备中的一个进程或者应用...

    android HTTP通信例子(json数据传递)

    在Android应用开发中,HTTP通信是连接客户端与服务器端的重要桥梁,主要用于数据交换、文件上传和下载等操作。本示例将重点讲解如何在Android应用中实现基于HTTP的JSON数据传递,以及如何处理文件的上传和下载。 ...

    Android跨进程通信demo

    在Android系统中,跨进程通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。Android的IPC机制主要包括Binder、AIDL(Android Interface Definition Language)、ContentProvider...

    Android系统应用开发 实验五 网络通信 实验报告

    在Android系统应用开发中,网络通信是至关重要的一个环节,特别是在构建交互性强的应用时。本实验旨在让学生深入了解Android网络通信技术,并通过实际操作掌握不同类型的网络通信方式,包括利用WebView实现浏览器...

    Android中线程间通信.pdf

    ### Android中线程间通信详解 #### 一、引言 在Android开发中,线程间的通信是一项重要的技术。为了确保应用的响应性和流畅性,开发者必须了解如何正确地管理和同步多个线程之间的数据交换。本文将深入探讨Android...

    android与服务器通信

    在Android应用开发中,与服务器进行通信是必不可少的环节,特别是在构建涉及用户登录、数据交换等应用场景时。本文将深入探讨Android与服务器通信的基本概念、技术选型以及具体实现方式,以标题“android与服务器...

    Android-HTT.zip_android_htt:2360.com

    "Android HTT.ppt"这份资料很可能详细介绍了上述内容,包括Android开发环境的搭建、HTTP协议详解、Android中HTTP通信的实现方式以及相关的最佳实践。通过学习,你可以深入理解Android网络编程的核心概念,并具备实际...

    Android中的Http通信(二)

    Http通信。通过两个例子: > 网络请求到百度的网页,展示到一个webview上。 > 网络请求一张图片,展示到界面的ImageView上。

    android 中的数据通信

    在Android系统中,数据通信是应用之间以及应用与外部设备之间交换信息的关键环节。这篇博客“android中的数据通信”可能涵盖了Android数据通信的各种方法和技术,包括本地数据存储、网络通信和蓝牙等。以下是对这些...

    Android-netty和socket通信的demo

    在Android开发中,网络通信是不可或缺的一部分,而Netty是一个高效、强大的网络应用程序框架,它为构建高性能、稳定的网络服务器提供了便利。本示例“Android-netty和socket通信的demo”将展示如何在Android平台上...

    Android开发—网络通信7—Android中基于HTTP的通信技术视频教程下载(2课程).txt

    使用Http的Get方式读取网络数据.mp4

    Android串口通信demo(AS)

    **Android串口通信**是Android应用开发中的一个重要领域,它允许设备通过串行接口与其他硬件设备进行数据交换,如Arduino、PLC等。在本文中,我们将深入探讨如何在Android Studio中实现串口通信,以及如何利用提供的...

    Android_Service通信

    Android下的服务与其他组件之间的通信,跨进程通信等示例。具体可以参见博客:http://www.cnblogs.com/plokmju/p/android_ServiceCommunication.html

    Android与Javaweb服务器通信

    在提供的"android与服务器端交互demo"文件中,可能包含了Android客户端的HTTP请求示例代码以及简单的Java Servlet示例,通过分析和运行这些代码,你将更深入地理解Android与服务器通信的过程。记得在实际项目中,...

Global site tag (gtag.js) - Google Analytics