android联网

来源:互联网 发布:情侣对唱网络 编辑:程序博客网 时间:2024/04/27 20:57

 使用 标准Java接口: 设计的类: java.net.* 

基本步骤


1) 创建 URL 以及 URLConnection / HttpURLConnection 对象 

2) 设置连接参数 

3) 连接到服务器 

4) 向服务器写数据 


5)从服务器读取数据 

  1. try {     
  2.    // 创建一个 URL 对象     
  3.    URL url = new URL(your_url);     
  4.     
  5.    // 创建一个 URL 连接,如果有代理的话可以指定一个代理。     
  6.    URLConnection connection = url.openConnection(Proxy_yours);     
  7.    // 对于 HTTP 连接可以直接转换成 HttpURLConnection,这样就可以使用一些 HTTP 连接特定的方法,如 setRequestMethod() :  
  8.    //HttpURLConnection connection =  
  9. //      (HttpURLConnection)url.openConnection(Proxy_yours);     
  10.   
  11.    // 在开始和服务器连接之前,可能需要设置一些网络参数     
  12.    connection.setConnectTimeout(10000);     
  13.   
  14.    connection.addRequestProperty(User-Agent,J2me/MIDP0);     
  15.    // 连接到服务器     
  16.    connection.connect();     
  17.    // 与服务器交互:  
  18.    OutputStream outStream = connection.getOutputStream();     
  19.    ObjectOutputStream objOutput = new ObjectOutputStream(outStream);     
  20.    objOutput.writeObject(new String(this is a string...));     
  21.    objOutput.flush();     
  22.    InputStream in = connection.getInputStream();     
  23.    // 处理数据     
  24.    ...     
  25.     } catch (Exception e) {  
  26.       // 网络读写操作往往会产生一些异常,所以在具体编写网络应用时     
  27.      // 最好捕捉每一个具体以采取相应措施     
  28.    }   



 使用 apache 接口: 

  Apache HttpClient 是一个开源项目,弥补了 java.net.*灵活性不足的缺点, 支持客户端的HTTP编程

  使用的类包括:  org.apache.http.* 


  步骤

  1) 创建 HttpClient 以及 GetMethod / PostMethod HttpRequest等对象

  2) 设置连接参数

  3) 执行 HTTP 操作

  4) 处理服务器返回结果


  1. try {  
  2.     // 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)  
  3.     HttpParams params = new BasicHttpParams();  
  4.      
  5.     // 设置连接超时和 Socket 超时,以及 Socket 缓存大小:  
  6.     HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);  
  7.     HttpConnectionParams.setSoTimeout(params, 20 * 1000);  
  8.     HttpConnectionParams.setSocketBufferSize(params, 8192);  
  9.     // 设置重定向,缺省为 true:  
  10.     HttpClientParams.setRedirecting(params, true);  
  11.     // 设置 user agent:  
  12.     HttpProtocolParams.setUserAgent(params, userAgent);  
  13.   
  14.     // 创建一个 HttpClient 实例:  
  15.     // 注意: HttpClient httpClient = new HttpClient(); Commons HttpClient中的用法,  
  16.     //       Android 5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient.  
  17.     DefaultHttpClient httpClient = new DefaultHttpClient(params);  
  18.   
  19.     // 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向:  
  20.     HttpGet httpGet = new HttpGet (http://www.test_test.com/);  
  21.   
  22.     //执行此方法:  
  23.     HttpResponse response = client.execute(httpGet);  
  24.   
  25.     if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {  
  26.          // 错误处理,例如可以在该请求正常结束前将其中断:  
  27.          httpGet.abort();  
  28.     }  
  29.       
  30.     // 读取更多信息  
  31.     Header[] headers = response.getHeaders();  
  32.     HttpEntity entity = response.getEntity();  
  33.     Header header = response.getFirstHeader(Content-Type);  
  34.  } catch (Exception ee) {  
  35.         // ...  
  36.  } finally {  
  37.      // 释放连接:  
  38.     client.getConnectionManager().shutdown();  
  39.   }  



以下例子以 HttpGet 方式通过代理访问 HTTPS 网站: 

Java代码  

  1. try {  
  2.   HttpClient httpClient = new HttpClient();  
  3.   
  4.   // 设置认证的数据:  httpClient好像没有方法getCredentialsProvider()??  
  5.   httpClient.getCredentialsProvider().setCredentials(  
  6.               new AuthScope(your_auth_host, 80, your_realm),  
  7.               new UsernamePasswordCredentials(username, password));  
  8.   
  9.   
  10.   // 设置服务器地址,端口,访问协议:  
  11.   HttpHost targetHost = new HttpHost(www.verisign.com, 443, https);  
  12.   
  13.   // 设置代理:  
  14.   HttpHost proxy = new HttpHost(1916180);  
  15.   httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);  
  16.   
  17.   // 创建一个 HttpGet 实例:  
  18.   HttpGet httpGet = new HttpGet(/a/b/c);  
  19.   
  20.   // 连接服务器并获取应答数据:  
  21.   HttpResponse response = httpClient.execute(targetHost, httpGet);  
  22.   
  23.   // 读取应答数据:  
  24.   int statusCode = response.getStatusLine().getStatusCode();  
  25.   Header[] headers = response.getHeaders();  
  26.   HttpEntity entity = response.getEntity();  
  27.    //    ...  
  28. catch (Exception ee) {  
  29.    //    ...  
  30. }  



 使用 android 接口: 

android.net.http.* 实际上是通过对 Apache HttpClient 的封装来实现的一个 HTTP编程接口,同时还提供了 HTTP 请求队列管理、以及 HTTP连接池管理,以提高并发请求情况下(如转载网页时)的处理效率,除此之外还有网络状态监视等接口。 


例:(class AndroidHttpClient : Since Android API level


Java代码  

  1. try {   
  2.    AndroidHttpClient client =   
  3.                AndroidHttpClient.newInstance(“user_agent__my_mobile_browser”);  
  4.   
  5.   // 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向:  
  6.   HttpGet httpGet = new HttpGet (http://www.test_test.com/);  
  7.   HttpResponse response = client.execute(httpGet);  
  8.   if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {  
  9.          // 错误处理...  
  10.   }  
  11.   //...  
  12.   
  13.   // 关闭连接:  
  14.   client.close();  
  15. catch (Exception ee) {  
  16.    //...  
  17. }