android HttpClient 的使用

Https与Http类似,只不过Https一般是通过post请求服务器,但是Https与http不同的是Https与服务器会话是处于连接状态。http则发送请求后连接就会断开。



我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。

httpclient 的get方法和post方法有什么区别

1. get是从服务器上获取数据,post是向服务器传送数据。 2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。 4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式; 2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式

本文出自:http://blog.csdn.net/zhongnan09/article/details/6565384

在AndroidSDK中,有很多包都支持网络编程,下面列举了Android中集成的网络编程相关的包:

      

描述

java.net

提供与联网有关的类,包括流和数据包(datagram)sockets、Internet 协议和常见 HTTP 处理。该包是一个多功能网络资源。有经验的 Java 开发人员可以立即使用这个熟悉的包创建应用程序。

java.io

虽然没有提供显式的联网功能,但是仍然非常重要。该包中的类由其他 Java 包中提供的 socket 和连接使用。它们还用于与本地文件(在与网络进行交互时会经常出现)的交互。

java.nio

包含表示特定数据类型的缓冲区的类。适合用于两个基于 Java 语言的端点之间的通信。

org.apache.*

表示许多为 HTTP 通信提供精确控制和功能的包。可以将 Apache 视为流行的开源 Web 服务器。

android.net

除核心 java.net.* 类以外,包含额外的网络访问 socket。该包包括 URI 类,后者频繁用于 Android 应用程序开发,而不仅仅是传统的联网方面。

android.net.http

包含处理 SSL 证书的类。

android.net.wifi

包含在 Android 平台上管理有关 WiFi(802.11 无线 Ethernet)所有方面的类。并不是所有设备都配备了 WiFi 功能,特别是 Android 在 Motorola 和 LG 等手机制造商的 “翻盖手机” 领域获得了成功。

android.telephony.gsm

包含用于管理和发送 SMS(文本)消息的类。一段时间后,可能会引入额外的包来来为非 GSM 网络提供类似的功能,比如 CDMA 或 android.telephony.cdma 等网络。

 

已经集成了Apache的HttpClient模块,在这一节中,我们练习如何应用HttpClient创建连接并从网络上获取数据。

 

下面是Demo:

首先新建Android工程,并建立启动Activity:

 

MainActivity.java:

 

 

package com.xzq.httpclient;

 

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.protocol.HTTP;

import org.apache.http.util.EntityUtils;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

 

public class MainActivity extends Activity

{

  private Button mButton1, mButton2;

  private TextView mTextView1;

 

  @Override

  public void onCreate(Bundle savedInstanceState)

  {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mButton1 = (Button) findViewById(R.id.myButton1);

    mButton2 = (Button) findViewById(R.id.myButton2);

    mTextView1 = (TextView) findViewById(R.id.myTextView1);

    mButton1.setOnClickListener(new Button.OnClickListener()

    {

      @Override

      public void onClick(View v)

      {

        String uriAPI = "https://passport.sohu.com/web/dispatchAction.action";

        //使用post方式

        HttpPost httpRequest = new HttpPost(uriAPI);

        List<NameValuePair> params = new ArrayList<NameValuePair>();

        params.add(new BasicNameValuePair("str", "I am Post String"));

        try

        {

          httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

          HttpResponse httpResponse = new DefaultHttpClient()

              .execute(httpRequest);

          if (httpResponse.getStatusLine().getStatusCode() == 200)

          {

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

            mTextView1.setText(strResult);

          } else

          {

            mTextView1.setText("响应错误: "

                + httpResponse.getStatusLine().toString());

          }

        } catch (ClientProtocolException e)

        {

          mTextView1.setText(e.getMessage().toString());

          e.printStackTrace();

        } catch (IOException e)

        {

          mTextView1.setText(e.getMessage().toString());

          e.printStackTrace();

        } catch (Exception e)

        {

          mTextView1.setText(e.getMessage().toString());

          e.printStackTrace();

        }

      }

    });

    mButton2.setOnClickListener(new Button.OnClickListener()

    {

      @Override

      public void onClick(View v)

      {

        String uriAPI = "http://www.baidu.com";

        //使用get方式

        HttpGet httpRequest = new HttpGet(uriAPI);

        try

        {

          HttpResponse httpResponse = new DefaultHttpClient()

              .execute(httpRequest);

          if (httpResponse.getStatusLine().getStatusCode() == 200)

          {

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

            mTextView1.setText(strResult);

          } else

          {

            mTextView1.setText("错误消息: "

                + httpResponse.getStatusLine().toString());

          }

        } catch (ClientProtocolException e)

        {

          mTextView1.setText(e.getMessage().toString());

          e.printStackTrace();

        } catch (IOException e)

        {

          mTextView1.setText(e.getMessage().toString());

          e.printStackTrace();

        } catch (Exception e)

        {

          mTextView1.setText(e.getMessage().toString());

          e.printStackTrace();

        }

      }

    });

  }

}

 

Post方式的效果:

 

      

get方式效果如下:

 

 

要注意在main.xml文件中给TextView加上ScrollView标签,否则,当页面数据比较大时,不能出现滚动条,影响使用。另外,同样要在AndroidManifest.xml文件中添加访问网络的权限。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值