2013-05-15 26 views
1

我想从静态博客页面下载html,以便获取相关数据并使用它。对于异步程序,我使用robospice library如何使用RoboSpice下载html源代码?

事情是,使用SimpleTextRequest我只得到了HTML的第一行,即

<?xml version="1.0" encoding="UTF-8"?> 

我应该使用哪种请求下载整个HTML源代码?我没有发现任何类似的样本。而搜索“robospice”大多会导致他们的源代码,似乎这个库的教程很少。

UPDATE:Inspiredby第一个答案,我创建了这个自定义spicerequest:

public class HtmlRequest extends SpiceRequest<String> { 

    private static String reqUrl; 

    public HtmlRequest(String url) { 
     super(String.class); 
     reqUrl = url; 
     aLog.d("HtmlRequest.HtmlRequest url : " + url); 
    } 

    @Override 
    public String loadDataFromNetwork() throws Exception { 
     String html = ""; 

     HttpClient httpClient = new DefaultHttpClient(); 
     StringBuilder builder = new StringBuilder(); 
     HttpGet get = new HttpGet(reqUrl); 
     HttpResponse response = httpClient.execute(get); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     aLog.d("HtmlRequest.loadDataFromNetwork statusCode : " + statusCode); 
     if (statusCode == 200) { 
      /* 
      * Si todo fue ok, montamos la String con el HTML 
      */ 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       aLog.d("HtmlRequest.loadDataFromNetwork line : " + line); 
       builder.append(line); 
      } 
      html = builder.toString(); 
      aLog.d("HtmlRequest.loadDataFromNetwork html : " + html); 
     } 

     httpClient.getConnectionManager().shutdown(); 
     return html; 
    } 

} 

然后,在我的活动我有

spiceManager.execute(htmlRequest, "text", DurationInMillis.NEVER, new StaticItemRequestListener()); 

然而,我得不到任何我设置的日志我的自定义请求,除了在构造方法中的。

事情是:虽然我的htmlRequest显然没有被执行,我仍然得到上面的XML头。我一定在做一些错误的事情,但我很难看到它...

回答

2

很奇怪你得到的是一个XML文件的头部,而不是HTML。 试着问到服务器的HTML版本:

public class ExampleRequest extends SpiceRequest<String> { 

    public ExampleRequest() { 
     super(String.class); 
    } 

    @Override 
    public String loadDataFromNetwork() throws Exception { 

     String url = "your website url"; 

     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) { 
      System.setProperty("http.keepAlive", "false"); 
     } 

     HttpURLConnection urlConnection = (HttpURLConnection) new URL(url) 
      .openConnection(); 
     urlConnection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");  
     urlConnection.setRequestProperty("Content-Type", "text/html");    
     String result = IOUtils.toString(urlConnection.getInputStream()); 
     urlConnection.disconnect(); 

     return result; 
    } 
} 
+0

我只是尝试了一下这个网址http://www.sevilladirecto.com/telefonos-de-interes/,我也得到相同的结果 ' <?xml version =“1.0”encoding =“UTF-8”?>' – Frank

+0

我会尝试添加其他标题。尝试检查当您访问该页面时从浏览器发送哪些标题并将其添加到请求中。 – rciovati

+0

我发现了这个问题:我使用相同的活动2个不同的请求与相同的spicemanager。第二个总会给我那个有趣的头部结果。如果我只发起一个请求,那就OK了。 – Frank