在我们之前学习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 @Override 12 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 @Override 27 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 block 37 e.printStackTrace(); 38 } catch (IOException e) { 39 // TODO Auto-generated catch block 40 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 block 49 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 block 62 e.printStackTrace(); 63 } 64 } catch (IOException e) { 65 // TODO Auto-generated catch block 66 e.printStackTrace(); 67 } 68 handler.post(new Runnable() { 69 70 public void run() { 71 //第一个参数表示的是需要加载的数据--这个先前已经在输入流读入到了sb中 72 //第二参数表示的是需要加载网站的编码格式--百度的编码格式就是如此 73 /* 74 * 需要注意的是: 75 * loaddata不加载图片,如果想要加载图片,请使用loadDataWithBaseURL 76 */ 77 webview.loadData(sb.toString(), "text/html;charset=utf-8", null); 78 79 } 80 }); 81 } 82 83 }
时间: 2024-10-22 23:01:33