首页 > 代码库 > android中的HttpUrlConnection的使用之一

android中的HttpUrlConnection的使用之一

在我们之前学习Java的网络编程当中,我们已经见过HttpUrlConnection类的使用。HttpUrlConnect在Java是一个支持http特定的功能一个类,在许多的网络编程经常使用到它。今天我在这里记录的是android中使用HttpUrlConnection,之前我还学过使用异步加载来加载一个网站,它使用的原理同样是多线程,但是它使用的是用json来解析一个网站,而不是直接使用域名也就是网址来解析一个网站,而将要介绍的HttpUrlConnection是使用域名来解析一个网站的,当然它同时使用到了handler类,因为这个事例使用到了子线程来加载ui,主线程来更新ui。代码如下

xml代码

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:orientation="vertical" 6     tools:context="com.example.android_http.MainActivity" > 7     <WebView  8         android:id="@+id/webview" 9         android:layout_width="fill_parent"10         android:layout_height="fill_parent"11         />12 13 </LinearLayout>

从上面的xml中可以看出,我们只用了一个控件,那就是WebView。webview在加载网站当中自有它自己的妙处。

java代码

1.首先是Mainactivity类

 1 package com.example.android_http; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.webkit.WebView; 7  8 public class MainActivity extends Activity { 9     private WebView webview = null;10     private Handler handler = new Handler();11     @Override12     protected void onCreate(Bundle savedInstanceState) {13         super.onCreate(savedInstanceState);14         setContentView(R.layout.activity_main);15         webview = (WebView) findViewById(R.id.webview);16         new HttpThread("http://www.baidu.com", webview, handler).start();17     }18 19 }

2.其次是HttpThread类,这个继承类Thread类,创建了一个子线程来加载网页

 1 package com.example.android_http; 2  3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.net.HttpURLConnection; 7 import java.net.MalformedURLException; 8 import java.net.ProtocolException; 9 import java.net.URL;10 11 import javax.net.ssl.HttpsURLConnection;12 13 import android.os.Handler;14 import android.webkit.WebView;15 16 public class HttpThread  extends Thread{17     private String url = null;18     private WebView webview = null;19     private Handler handler = null;20     public HttpThread(String url, WebView webview, Handler handler)21     {22         this.handler = handler;23         this.url = url;24         this.webview = webview;25     }26     @Override27     public void run() {28         /*29          * 关于HttpUrlConnection的使用,有什么不懂,请回去认真复习一下Java的网络编程30          */31         HttpURLConnection httpurlconnection = null;32         try {33             URL url = new URL(this.url); 34             httpurlconnection = (HttpURLConnection) url.openConnection();35         } catch (MalformedURLException e) {36             // TODO Auto-generated catch block37             e.printStackTrace();38         } catch (IOException e) {39             // TODO Auto-generated catch block40             e.printStackTrace();41         }42         //允许超时5秒43         try {44             httpurlconnection.setReadTimeout(5000);45             //以get的方式与服务器相连接46             httpurlconnection.setRequestMethod("GET");47         } catch (ProtocolException e) {48             // TODO Auto-generated catch block49             e.printStackTrace();50         }51         final StringBuffer sb = new StringBuffer();52         String str = null;53         try {54             BufferedReader br = new BufferedReader(new InputStreamReader(httpurlconnection.getInputStream()));55             try {56                 while((str = br.readLine()) != null)57                 {58                     sb.append(str);59                 }60             } catch (IOException e) {61                 // TODO Auto-generated catch block62                 e.printStackTrace();63             }64         } catch (IOException e) {65             // TODO Auto-generated catch block66             e.printStackTrace();67         }68         handler.post(new Runnable() {69 70             public void run() {71                 //第一个参数表示的是需要加载的数据--这个先前已经在输入流读入到了sb中72                 //第二参数表示的是需要加载网站的编码格式--百度的编码格式就是如此73                 /*74                  * 需要注意的是:75                  * loaddata不加载图片,如果想要加载图片,请使用loadDataWithBaseURL76                  */77                 webview.loadData(sb.toString(), "text/html;charset=utf-8", null);78                 79             }80         });81     }82 83 }

 

android中的HttpUrlConnection的使用之一