android HttpClient 的使用

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

      

描述

java.net

提供与联网有关的类,包括流和数据包(datagramsocketsInternet 协议和常见 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 平台上管理有关 WiFi802.11 无线 Ethernet)所有方面的类。并不是所有设备都配备了 WiFi 功能,特别是 Android Motorola LG 等手机制造商的翻盖手机领域获得了成功。

android.telephony.gsm

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

 

已经集成了ApacheHttpClient模块,在这一节中,我们练习如何应用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文件中添加访问网络的权限。

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值