2012-02-17 53 views
1

我試圖連接到網頁,並從頁面獲取一些信息和圖像,並將其置於一個列表視圖中。 現在,我可以得到整個頁面的內容,但我怎樣才能得到一個類或圖像顯示?Android:獲取HTTP頁面並將其刮掉

代碼我現在使用:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class Main extends Activity { 
    /** Called when the activity is first created. */ 


    TextView text; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     text = (TextView) findViewById(R.id.tvText); 

     HttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet("http://www.wallbase.cc"); 
     try { 

     HttpResponse response = client.execute(request); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     String line = ""; 
     while((line = rd.readLine()) != null){ 
      text.append(line); 
     } 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 



    } 
} 

回答

2

如果HTML頁面是有效的XML(XHTML),那麼你可以解析的內容和使用XPath來獲取你想要的數據,但如果它是醜陋的HTML你必須解決這個問題(昂貴的,意味着花費寶貴的資源來完成這項工作),或者只是走內容並尋找你想要的東西。我有一個Android應用程序必須解析一些非常糟糕的HTML來獲取特定的圖像,並且我通過逐字符地查找並查找圖像來完成此操作,並且在找到該圖像時存儲我需要的URL以獲取該圖像對象並從循環中突破。

因此,在你的代碼要做到這一點,你可以使用閱讀:

rd.read(); 

代替的readLine再看看每個字符。這需要很多的條件(意思的if/else等)和正則表達式來查找內容,但有可能

編輯

啊剛纔雖然那我要補充如何後得到的圖像。所以,一旦你有該圖像的URL,這樣的事情:

Bitmap retImg; 
... 

HttpGet get = new HttpGet(imgURLStr); 
HttpConnectionParams.setConnectionTimeout(get.getParams(), 
CONNECTION_TIMEOUT_MS); 
HttpConnectionParams.setSoTimeout(get.getParams(), 
SOCKET_TIMEOUT_MS); 
HttpResponse response; 
try { 
    response = httpClient.execute(get); 
} catch (ClientProtocolException e) { 
    Log.e(TAG, e.getMessage(), e); 
    throw new IOException("Invalid protocol."); 
} 

if (response.getStatusLine().getStatusCode() != 200) { 
    throw new IOException("Bad response: " + 
    response.getStatusLine().getStatusCode()); 
} 

HttpEntity entity = response.getEntity(); 
BufferedInputStream bis = new BufferedInputStream(entity.getContent(), 
8 * 1024); 
retImg = BitmapFactory.decodeStream(bis); 
bis.close(); 

那麼這是從返回的圖像(retImg),這是在設備上的數據庫緩存,並在GUI中加載(旁邊的方法它只是從緩存中取出)

+0

啊非常感謝你! – 2012-02-17 17:33:26