• 《安卓网络编程》之第三篇 使用Apache接口


    在Android系统中,提供了一下三种通信接口:

    •  标准的Java 接口:java.net
    • Apache接口:org.apache.http
    • Android网络接口:android.net.http

    在android系统中,包含了Apache HttpClient库,此库为执行Android中的网络操作之首选方法。

    Apache应用基础

    本文讲的Apache是一个中介,它只负责传递消息,至于具体怎么上网它概不负责。

    联网流程

      在Android系统中,可以采用HttpPost和HttpGet来封装Post请求和Get请求,然后再使用HttpClient的excute()方法发送Post或者get请求来返回服务器的响应数据。使用Apache联网的基本流程如下:

    1. 设置连接和读取超时时间,并建立HttpClient对象
    2. 实现Get请求
    3. 实现Post发送请求处理
    4. 使用Response响应请求

    这样,使用Apache实现联网处理数据交互的过程就完成了,无论多么复杂的项目,都必须遵循上面的流程。

    下面是一个运行在安卓上的工程实例:

      1 package irdc.httpSHI;
      2 
      3 
      4 /*必需引用apache.http相关类来建立HTTP联机*/
      5 import org.apache.http.HttpResponse; 
      6 import org.apache.http.NameValuePair; 
      7 import org.apache.http.client.ClientProtocolException; 
      8 import org.apache.http.client.entity.UrlEncodedFormEntity; 
      9 import org.apache.http.client.methods.HttpGet;
     10 import org.apache.http.client.methods.HttpPost; 
     11 import org.apache.http.impl.client.DefaultHttpClient; 
     12 import org.apache.http.message.BasicNameValuePair; 
     13 import org.apache.http.protocol.HTTP; 
     14 import org.apache.http.util.EntityUtils; 
     15 /*必需引用java.io 与java.util相关类?来读写档案*/
     16 import irdc.httpSHI.R;
     17 
     18 import java.io.IOException; 
     19 import java.util.ArrayList; 
     20 import java.util.List; 
     21 import java.util.regex.Matcher;
     22 import java.util.regex.Pattern;
     23 
     24 import android.app.Activity; 
     25 import android.os.Bundle; 
     26 import android.view.View; 
     27 import android.widget.Button; 
     28 import android.widget.TextView; 
     29 
     30 public class httpSHI extends Activity 
     31 { 
     32   /*宣╳两个Button物件,与几个TextView物件*/
     33   private Button mButton1,mButton2; 
     34   private TextView mTextView1; 
     35    
     36   /** Called when the activity is first created. */ 
     37   @Override 
     38   public void onCreate(Bundle savedInstanceState) 
     39   { 
     40     super.onCreate(savedInstanceState); 
     41     setContentView(R.layout.main); 
     42      
     43     /*透过findViewById建构巳建立TextView与Button对象*/ 
     44     mButton1 =(Button) findViewById(R.id.myButton1); 
     45     mButton2 =(Button) findViewById(R.id.myButton2);
     46     mTextView1 = (TextView) findViewById(R.id.myTextView1); 
     47      
     48     mButton1.setOnClickListener(new Button.OnClickListener() 
     49     { 
     50   
     51       @Override 
     52       public void onClick(View v) 
     53       { 
     54    
     55         String uriAPI = "http://www.baidu.com";
     56         /*建立HTTP Post联机*/
     57         HttpPost httpRequest = new HttpPost(uriAPI); 
     58         /*
     59          * Post传送变量必须用NameValuePair[]存储
     60         */
     61         List <NameValuePair> params = new ArrayList <NameValuePair>(); 
     62         params.add(new BasicNameValuePair("str", "I am Post String")); 
     63         try 
     64         { 
     65           /*发叨HTTP request*/
     66           httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
     67           /*取得HTTP response*/
     68           HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); 
     69           /*若状态码为200*/
     70           if(httpResponse.getStatusLine().getStatusCode() == 200)  
     71           { 
     72             /*获取字符串*/
     73             String strResult = EntityUtils.toString(httpResponse.getEntity()); 
     74             mTextView1.setText(strResult); 
     75           } 
     76           else 
     77           { 
     78             mTextView1.setText("Error Response: "+httpResponse.getStatusLine().toString()); 
     79           } 
     80         } 
     81         catch (ClientProtocolException e) 
     82         {  
     83           mTextView1.setText(e.getMessage().toString()); 
     84           e.printStackTrace(); 
     85         } 
     86         catch (IOException e) 
     87         {  
     88           mTextView1.setText(e.getMessage().toString()); 
     89           e.printStackTrace(); 
     90         } 
     91         catch (Exception e) 
     92         {  
     93           mTextView1.setText(e.getMessage().toString()); 
     94           e.printStackTrace();  
     95         }  
     96          
     97       } 
     98     }); 
     99     mButton2.setOnClickListener(new Button.OnClickListener() 
    100     { 
    101       @Override 
    102       public void onClick(View v) 
    103       { 
    104         // TODO Auto-generated method stub 
    105         String uriAPI = "http://www.baidu.com/str=I+am+Get+String"; 
    106         /*建立HTTP Get联机*/
    107         HttpGet httpRequest = new HttpGet(uriAPI); 
    108         try 
    109         { 
    110           /*发送获取的HTTP request*/
    111           HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); 
    112           /*若状态码为200*/
    113           if(httpResponse.getStatusLine().getStatusCode() == 200)  
    114           { 
    115             /*取叨并应?串*/
    116             String strResult = EntityUtils.toString(httpResponse.getEntity());
    117             strResult = eregi_replace("(
    |
    |
    |
    
    )","",strResult);
    118             mTextView1.setText(strResult); 
    119           } 
    120           else 
    121           { 
    122             mTextView1.setText("Error Response: "+httpResponse.getStatusLine().toString()); 
    123           } 
    124         } 
    125         catch (ClientProtocolException e) 
    126         {  
    127           mTextView1.setText(e.getMessage().toString()); 
    128           e.printStackTrace(); 
    129         } 
    130         catch (IOException e) 
    131         {  
    132           mTextView1.setText(e.getMessage().toString()); 
    133           e.printStackTrace(); 
    134         } 
    135         catch (Exception e) 
    136         {  
    137           mTextView1.setText(e.getMessage().toString()); 
    138           e.printStackTrace();  
    139         }  
    140       } 
    141     }); 
    142   }
    143     public String eregi_replace(String strFrom, String strTo, String strTarget)
    144     {
    145       String strPattern = "(?i)"+strFrom;
    146       Pattern p = Pattern.compile(strPattern);
    147       Matcher m = p.matcher(strTarget);
    148       if(m.find())
    149       {
    150         return strTarget.replaceAll(strFrom, strTo);
    151       }
    152       else
    153       {
    154         return strTarget;
    155       }
    156     }
    157 } 

    实现了post和get俩种方式联网。

    xml文件:

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:background="@drawable/white" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      > 
      <TextView 
        android:id="@+id/myTextView1" 
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="@string/title"/> 
      <Button 
        android:id="@+id/myButton1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/str_button1" /> 
        <Button 
        android:id="@+id/myButton2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/str_button2" />    
    </LinearLayout> 

  • 相关阅读:
    对象数组输出学生信息
    对象数组实现添加和显示客户信息
    控制台输出模拟注册登录幸运抽奖
    对象数组和for循环遍历输出学生的信息
    控制台输出<迷你DVD管理>
    CF524B 题解
    优先队列的重载运算符
    [洛谷日报第19期]Codeforces游玩攻略(转)
    最短路(三种基础算法)
    P2032 扫描
  • 原文地址:https://www.cnblogs.com/hixin/p/4364749.html
Copyright © 2020-2023  润新知