• 12.2 HTTP请求


        如果不通过HTTP访问,那么Web服务不会是一个”Web“服务。在Android上生成一个HTTP请求非常的简单,可以使用Apache提供的HttpClient类,他们包含在Android的org.apache.http程序包中。

         首先需要创建HttpClient对象,它实际上是一个DefaultHttpClient对象。

    1         HttpClient httpclient=new DefaultHttpClient();

        随后就可以构造请求。在当前情况下会生成一个GTTP GET请求,它以查询字符串的形式将任何参数放到URL中。这与HTTP POST请求相反,其发送额外的数据作为请求消息的主体,而不是作为URL的一部分。

        为了创建一个GTTP GET请求,需要实例化一个HttpGet对象,并传入想要检索的页面的URL。在当前情况下是传入一个URL,指向Apress站点上关于这本书的页面。

    1         HttpGet httpget=new HttpGet("http://www.apress.com/book/view/9781430232674");

        随后调用execute方法,将HttpGet对象传递给HttpClient对象以执行该请求。这将返回一个HttpResponse对象。

    1             HttpResponse response=httpclient.execute(httpget);

        HttpResponse将包含一个HttpEntity对象,其本质上是一条HTTP消息。请求和响应都包含实体。

    1             HttpEntity entity=response.getEntity();

        HttpEntity上的getContent方法将返回一个InputStream,可以使用它来读取在响应中实际发送的内容。

    1                 InputStream inputstream=entity.getContent();

        接下来通过一个简短的示例进行说明。

     1 package com.nthm.androidtestActivity;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.io.InputStreamReader;
     7 import org.apache.http.HttpEntity;
     8 import org.apache.http.HttpResponse;
     9 import org.apache.http.client.HttpClient;
    10 import org.apache.http.client.methods.HttpGet;
    11 import org.apache.http.impl.client.DefaultHttpClient;
    12 import com.nthm.androidtest.R;
    13 import android.app.Activity;
    14 import android.os.Bundle;
    15 import android.util.Log;
    16 
    17 public class SimpleHTTPRequest extends Activity {
    18 
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.main);

        首先将实例化HttpClient对象和HttpGet对象。

    1         HttpClient httpclient=new DefaultHttpClient();
    2         HttpGet httpget=new HttpGet("http://www.apress.com/book/view/9781430232674");

        由于HttpClient上的execute方法可能会抛出异常,因此需要将它包装在try/catch块中。

    1         try{
    2             HttpResponse response=httpclient.execute(httpget);
    3             HttpEntity entity=response.getEntity();
    4             if(entity!=null){

        如果存在HttpEntity,那么访问InputStream以读取响应。

    1                 InputStream inputstream=entity.getContent();

        在InputStream封装在一个BufferedReader中,并利用一个StringBuilder对象来将它变成一个正常的字符串,从而在最后使用它。

     1                 BufferedReader bufferedreader=new BufferedReader(new InputStreamReader(inputstream));
     2                 StringBuilder stringbuilder=new StringBuilder();
     3                 String currentline=null;
     4                 try{
     5                     while((currentline=bufferedreader.readLine())!=null){
     6                         stringbuilder.append(currentline+"
    ");
     7                     }
     8                 }catch(IOException e){
     9                     e.printStackTrace();
    10                 }

        在完全读取其内容之后,使用StringBuilder对象上的toString方法获取结果字符串,然后调用Log方法将它打印出来。

    1                 String result=stringbuilder.toString();
    2                 Log.i("SimpleHTTPRequest", result);
    3                 inputstream.close();
    4             }
    5         }catch(Exception e){
    6             e.printStackTrace();
    7         }
    8     }
    9 }

        当然,必须有访问Internet的权限,因此需要在AndroidManifest.xml中指定它

    1     <uses-permission android:name="android.permission.INTERNE

        既然已经知道如何为一个通用的Web资源生成HTTP请求,现在就让我们看看在请求一个Web服务之后如何处理可能返回的数据类型。接下来将以JSON格式的数据作为开始。

  • 相关阅读:
    postman 调试接口报“401 身份认证信息未提供”错误
    UserWarning: XXX is writable by group/others and vulnerable to attack when used with get_resource_filename.
    以root权限执行python时候脚本时候报错“ExtractionError: Can't extract file(s) to egg cache”
    django接口调试示例说明
    查看linux系统版本、内存、CPU、存储容量
    一次批量杀死多个进程
    bash:pybot未找到命令
    Swoft-Api项目部署九:前、后置中间件
    Swoft-Api项目部署八:主从数据库配置
    Swoft-Api项目部署七:验证器
  • 原文地址:https://www.cnblogs.com/ZSS-Android/p/3962723.html
Copyright © 2020-2023  润新知