Wednesday, 9 February 2011

Не блокируемый веб-запрос Android

В данном примере мы получим html ответ от сервера и отобразим его на TextView.

Итак, для начала, чтобы у нас работало интернет соединение в программе, добавим запрос на такую функцию в AndroidManifest.xml. Если Вы этого не сделаете, то интернет функции работать не будут. Добавить разрешение на это можно на вкладке Permissons AndroidManifest'а или добавив данный код перед последним тегом:

  1. <uses-permission android:name="android.permission.INTERNET"/>

В Java коде напишем, примерно, следующее:

  1. package com.example;
  2.  
  3. import java.io.BufferedInputStream; 
  4. import java.io.InputStream; 
  5. import java.net.URL; 
  6. import java.net.URLConnection; 
  7. import org.apache.http.util.ByteArrayBuffer; 
  8. import android.app.Activity;
  9. import android.os.Bundle;
  10. import android.os.Handler;
  11. import android.widget.TextView;
  12.  
  13. public class ExampleActivity extends Activity { 
  14.   private String html = ""//Переменная, где будет хранится полученный текст
  15.   private Handler mHandler; 
  16.  
  17.   public void onCreate(Bundle savedInstanceState) { 
  18.     super.onCreate(savedInstanceState); 
  19.     setContentView(R.layout.main);
  20.     mHandler = new Handler(); 
  21.     checkUpdate.start(); 
  22.   } 
  23.  
  24.   private Thread checkUpdate = new Thread() { 
  25.     public void run() { 
  26.       try
  27.         URL updateURL = new URL("http://iconic.4feets.com/update");  //Задаем урл для скачивания
  28.         URLConnection conn = updateURL.openConnection(); 
  29.         InputStream is = conn.getInputStream(); 
  30.         BufferedInputStream bis = new BufferedInputStream(is); 
  31.         ByteArrayBuffer baf = new ByteArrayBuffer(50); 
  32.  
  33.         int current = 0; 
  34.         while((current = bis.read()) != -1){ 
  35.           baf.append((byte)current); 
  36.         } 
  37.  
  38.         /* Конвертирование байтов в текст. */ 
  39.         html = new String(baf.toByteArray()); 
  40.         mHandler.post(showUpdate); 
  41.       } catch (Exception e) { 
  42.       } 
  43.     } 
  44.   }; 
  45.  
  46.   private Runnable showUpdate = new Runnable(){ 
  47.     public void run(){
  48.       TextView textview = (TextView) findViewById(R.id.textview);
  49.       textview.setText("HTML текст: " + html);
  50.     } 
  51.   }; 
  52. }

Вот что у нас получится:


No comments:

Post a Comment