PDA

Ver la Versión Completa : Unfortunately....


ayozito
23/04/12, 14:04:22
Estoy haciendo un programa en el que necesito extraer cierta información desde una web.


public void getData(String url){
boolean hecho = false;
BufferedReader urlStream;
String sourceCode = null;
URL pagina;

while (!hecho){
try{
pagina = new URL(url);
urlStream = new BufferedReader(new InputStreamReader(pagina.openStream())); <------------------- A partir de aqui da error.

sourceCode = urlStream.readLine();
while (sourceCode != null) {
if (sourceCode.contains("var wg_fcst_tab_data_1"))
break;
sourceCode = urlStream.readLine();
}
hecho = true;
try {urlStream.close();} catch(Exception e) {}
}
catch (MalformedURLException urlError){
Toast.makeText(this, urlError.getMessage(), Toast.LENGTH_LONG).show();
}
catch (IOException ioError){
Toast.makeText(this, ioError.getMessage(), Toast.LENGTH_LONG).show();
}
catch (IllegalArgumentException argError){
Toast.makeText(this, argError.getMessage(), Toast.LENGTH_LONG).show();
}
}


la parte de la extracción es la que adjunto, y no se por qué pero dentro del while hay algo que hace saltar el error de Unfortunately app has stopped...

Al principio tenia en vez de los makeText el system.out.println de java y pensé que era eso, pero no... He comprobado la URL y es correcta, y se que es dentro del while porque comentándolo no da el error..

En el manifest le doy el permiso de internet.

Decir que en Java el programa funciona sin ningún problema.

He probado de este modo (http://stackoverflow.com/questions/6503574/how-to-get-html-source-code-from-url-in-android) y lo mismo.

Que ven raro?

El log es:

04-23 12:00:51.308: E/AndroidRuntime(535): FATAL EXCEPTION: main
04-23 12:00:51.308: E/AndroidRuntime(535): android.os.NetworkOnMainThreadException
04-23 12:00:51.308: E/AndroidRuntime(535): at android.os.StrictMode$AndroidBlockGuardPolicy.onNe twork(StrictMode.java:1099)
04-23 12:00:51.308: E/AndroidRuntime(535): at java.net.InetAddress.lookupHostByName(InetAddress. java:391)
04-23 12:00:51.308: E/AndroidRuntime(535): at java.net.InetAddress.getAllByNameImpl(InetAddress. java:242)
04-23 12:00:51.308: E/AndroidRuntime(535): at java.net.InetAddress.getAllByName(InetAddress.java :220)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpConnection$Address.connect(Ht tpConnection.java:351)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpConnectionPool.get(HttpConnec tionPool.java:86)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpConnection.connect(HttpConnec tion.java:128)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpEngine.openSocketConnection(H ttpEngine.java:308)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpEngine.connect(HttpEngine.jav a:303)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpEngine.sendSocketRequest(Http Engine.java:282)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpEngine.sendRequest(HttpEngine .java:232)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpURLConnectionImpl.getResponse (HttpURLConnectionImpl.java:273)
04-23 12:00:51.308: E/AndroidRuntime(535): at libcore.net.http.HttpURLConnectionImpl.getInputStr eam(HttpURLConnectionImpl.java:168)
04-23 12:00:51.308: E/AndroidRuntime(535): at java.net.URL.openStream(URL.java:462)
04-23 12:00:51.308: E/AndroidRuntime(535): at com.appname.AppNameActivity.getData(AppNameActivit y.java:206)
04-23 12:00:51.308: E/AndroidRuntime(535): at com.appname.AppNameActivity.onListItemClick(AppNam eActivity.java:247)
04-23 12:00:51.308: E/AndroidRuntime(535): at android.app.ListActivity$2.onItemClick(ListActivit y.java:319)
04-23 12:00:51.308: E/AndroidRuntime(535): at android.widget.AdapterView.performItemClick(Adapte rView.java:292)
04-23 12:00:51.308: E/AndroidRuntime(535): at android.widget.AbsListView.performItemClick(AbsLis tView.java:1058)
04-23 12:00:51.308: E/AndroidRuntime(535): at android.widget.AbsListView$PerformClick.run(AbsLis tView.java:2514)
04-23 12:00:51.308: E/AndroidRuntime(535): at android.widget.AbsListView$1.run(AbsListView.java: 3168)
04-23 12:00:51.308: E/AndroidRuntime(535): at android.os.Handler.handleCallback(Handler.java:605 )
04-23 12:00:51.308: E/AndroidRuntime(535): at android.os.Handler.dispatchMessage(Handler.java:92 )
04-23 12:00:51.308: E/AndroidRuntime(535): at android.os.Looper.loop(Looper.java:137)
04-23 12:00:51.308: E/AndroidRuntime(535): at android.app.ActivityThread.main(ActivityThread.jav a:4424)
04-23 12:00:51.308: E/AndroidRuntime(535): at java.lang.reflect.Method.invokeNative(Native Method)
04-23 12:00:51.308: E/AndroidRuntime(535): at java.lang.reflect.Method.invoke(Method.java:511)
04-23 12:00:51.308: E/AndroidRuntime(535): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:784)
04-23 12:00:51.308: E/AndroidRuntime(535): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:551)
04-23 12:00:51.308: E/AndroidRuntime(535): at dalvik.system.NativeStart.main(Native Method)

ayozito
23/04/12, 17:43:04
bueno ya he encontrado el error. Es que las tareas que usen conexión de red tienen que hacerse en hilos independientes.