2012-04-14 2 views
2

Я пытаюсь получить исходный HTML в строку с веб-сайта, который входит пользователь, код, который я до сих пор выглядит следующим образом:Чтение HTML источник из Android App

public String getURLContent(String url) 
{ 
    try 
    { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     ResponseHandler<String> resHandler = new BasicResponseHandler(); 
     String page = httpClient.execute(httpGet, resHandler); 
     return page; 
    } 
    catch (ClientProtocolException e) 
    { 
     e.printStackTrace(); 
     return ""; 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
     return ""; 
    } 
} 

Каждый раз, когда я попробуйте запустить это, я ударил второй catch (IOException), который, согласно документации, означает, что сервер не смог дать действительный ответ ... Я тестирую это с помощью таких сайтов, как «http: \ www.google.com \», поэтому они должны обязательно отвечать

+0

Вы добавили необходимые разрешения, такие как android.permission.INTERNET? – Jems

+0

У меня только одно разрешение: Есть ли другие? – CHollman82

+0

Если это на самом деле ваш URL-адрес, это неверно. Вам понадобилось бы две черты перед «www» – FoamyGuy

ответ

1

Ваш код в порядке. Убедитесь, что вы вставляете полный путь сайта: http://www. [page] . [domain] например .: http://www.google.com И добавить к РАЗРЕШЕНИЯ AndroidManifest.xml

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

непосредственно перед (если это новый проект):

<application android:label="@string/app_name"> 

Полный пример:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example" 
      android:versionCode="1" 
      android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="10"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <application android:label="@string/app_name"> 
     <activity android:name="MyActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 
+0

Спасибо, мой манифест выглядит точно так, я уверен, что использую правильные адреса (я пробовал много), все еще не работает правильно, все еще попадает в IOException при вызове httpClient.execute(). .. Я вытягиваю свои волосы сейчас, когда вы, ребята, сказали мне, что код выглядит правильно! – CHollman82

+0

попробуйте использовать отладчик и проверьте значения переменных шаг за шагом – deadfish

+0

и попробуйте поместить адрес веб-сайта в новый HttpGet (... 'по крайней мере, вы будете уверены, что адрес сайта не проблема – deadfish

1

Если вы не хотите выполнять какой-либо пользовательский синтаксический анализ со всей строкой, я бы посоветовал использовать библиотеку синтаксиса HTML. Я использую HTML-очиститель, показал here.

Это заставляет всех лошадей работать на вас.

+0

Спасибо за отзыв! – CHollman82

+0

Я отредактировал ответ, потому что ему не хватало ссылки. Извини, я виноват. ;) –