Android開發16——獲取網路資源之基礎應用

weixin_33766168發表於2017-11-30

一、專案背景
在Android開發中有一項非常廣泛的應用:Android專案獲取另一個web專案的資源或者返回的資料。本博文介紹了獲取另一個web專案的資源。有一個web專案,在其WebRoot資料夾下有一個靜態頁面test.html。現有一個Android專案要獲取到該頁面的html程式碼顯示在TextView中。


二、例項程式碼

 


  1. public class MainActivity extends Activity  
  2. {  
  3.  private EditText txtPath;  
  4.  private Button btnShowHtml;  
  5.  private TextView txtViewHtml;  
  6.    
  7.  @Override 
  8.  public void onCreate(Bundle savedInstanceState)  
  9.  {  
  10.   super.onCreate(savedInstanceState);  
  11.   setContentView(R.layout.main);  
  12.   txtPath = (EditText)this.findViewById(R.id.txtPath);  
  13.   btnShowHtml = (Button)this.findViewById(R.id.btnShowHtml);  
  14.   txtViewHtml = (TextView)this.findViewById(R.id.txtViewHtml);  
  15.   btnShowHtml.setOnClickListener(new ShowHtmlListener());  
  16.  }  
  17.    
  18.  private final class ShowHtmlListener implements View.OnClickListener  
  19.  {  
  20.   @Override 
  21.   public void onClick(View v)  
  22.   {  
  23.    String path = txtPath.getText().toString();  
  24.    try 
  25.    {  
  26.     String html = HtmlService.getHtml(path);  
  27.     txtViewHtml.setText(html);  
  28.    }  
  29.    catch (Exception e)  
  30.    {  
  31.     Toast.makeText(MainActivity.this"獲取網頁元素失敗", Toast.LENGTH_SHORT).show();  
  32.    }  
  33.   }   
  34.  }  
  35. }  
  36.  
  37.  
  38. package cn.xy.html.service;  
  39. import java.io.InputStream;  
  40. import java.net.HttpURLConnection;  
  41. import java.net.URL;  
  42. import cn.xy.html.util.IOUtils;  
  43. /**  
  44.  * Html獲取業務類  
  45.  * @author 徐越  
  46.  */ 
  47. public class HtmlService  
  48. {  
  49.  /**  
  50.   * 獲取網頁html原始碼  
  51.   * @param path  
  52.   * @return  
  53.   */ 
  54.  public static String getHtml(String path) throws Exception  
  55.  {  
  56.   String html = "";  
  57.   // 把路徑包裝成URL物件  
  58.   URL url = new path);  
  59.   // 基於http協議的連線物件  
  60.   HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  61.   // 超時時間5s  
  62.   conn.setReadTimeout(5000);  
  63.   // 獲取傳輸方式  
  64.   conn.setRequestMethod("GET");  
  65.   // 若響應碼為200說明請求成功  
  66.   if(200 == conn.getResponseCode())  
  67.   {  
  68.    InputStream instream = conn.getInputStream();  
  69.    byte[] data = IOUtils.read(instream);  
  70.    // 真實情況是讀出請求頭的charset值  
  71.    html = new String(data,"UTF-8");   
  72.   }  
  73.   return html;  
  74.  }  
  75. }  
  76.  
  77.  
  78. package cn.xy.html.util;  
  79. import java.io.ByteArrayOutputStream;  
  80. import java.io.IOException;  
  81. import java.io.InputStream;  
  82. /**  
  83.  * IO操作工具類  
  84.  * @author 徐越  
  85.  */ 
  86. public class IOUtils  
  87. {  
  88.  /**  
  89.   * 獲取輸入流的方法  
  90.   */ 
  91.  public static byte[] read(InputStream instream) throws IOException  
  92.  {  
  93.   ByteArrayOutputStream bos = new ByteArrayOutputStream();  
  94.   byte[] buffer = new byte[1024];  
  95.   int len = 0;  
  96.   while ((len = instream.read(buffer)) != -1)  
  97.   {  
  98.    bos.write(buffer, 0, len);  
  99.   }  
  100.   return bos.toByteArray();  
  101.  }  

 


  1. <TextView    
  2.  android:layout_width="fill_parent"   
  3.  android:layout_height="wrap_content"   
  4.  android:text="網路頁面路徑" 
  5. /> 
  6. <!-- 網址輸入不能使localhost或127.0.0.1 --> 
  7. <!-- 因為android是一個作業系統,輸入localhost或127.0.0.1會到本作業系統下去找某web應用,所以要使用區域網的ip --> 
  8. <EditText    
  9.  android:layout_width="fill_parent"   
  10.  android:layout_height="wrap_content"   
  11.  android:id="@+id/txtPath" 
  12.  android:text="http://xxx.xxx.xxx.xxx:8080/ad_20_web/test.html" 
  13. /> 
  14. <Button    
  15.  android:layout_width="wrap_content"   
  16.  android:layout_height="wrap_content" 
  17.  android:text="獲取html" 
  18.  android:id="@+id/btnShowHtml" 
  19. /> 
  20. <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"> 
  21.  <TextView    
  22.   android:layout_width="fill_parent"   
  23.   android:layout_height="wrap_content" 
  24.   android:id="@+id/txtViewHtml" /> 
  25. </ScrollView> 

ScrollView標籤為TextView增加滾動條。

當然不能忘記訪問網路需要許可權


  1. <!-- 訪問網路許可權 --> 
  2. <uses-permission android:name="android.permission.INTERNET" /> 


三、總結
HtmlService中的方法其實可以獲取任意型別的資料,因為其中一個環節是獲取了byte[],拿到這個位元組陣列後我們可以根據不同型別的資料進行不同的操作。比如拿到一個圖片byte[],就需要使用Bitmap工廠將其轉化為Bitmap然後賦給ImageView控制元件。所以我們要熟悉獲取網路資源的一般步驟。

本文轉自IT徐胖子的專欄部落格51CTO部落格,原文連結http://blog.51cto.com/woshixy/1087182如需轉載請自行聯絡原作者


woshixuye111

相關文章