0

I'm trying call a external xml and I have a something errors.

Error

06-02 04:32:21.085 1658-1658/com.golftipp E/Ideas4All﹕ Error android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) at java.net.InetAddress.lookupHostByName(InetAddress.java:385) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) at java.net.InetAddress.getAllByName(InetAddress.java:214) at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179) at java.net.URL.openStream(URL.java:470) at com.golftipp.IntroduceCodigo.loadCategories(IntroduceCodigo.java:111) at com.golftipp.IntroduceCodigo.irFormularioReserva(IntroduceCodigo.java:67) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at android.view.View$1.onClick(View.java:3818) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)

Code

private Vector<datos_codigos> categories;
private String categories_url = "http://www.url.com/beta.xml";

public void loadCategories() {

    try {

        // Url del archivo XML
        URL url = new URL(categories_url);

        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();

        XMLReader xr = sp.getXMLReader();
        // Utilizamos nuestro propio parseador (CategoryHandler)
        xmlSax myExampleHandler = new xmlSax();
        xr.setContentHandler(myExampleHandler);

        InputSource is = new InputSource(url.openStream());
        // Le indicamos la codificación para evitar errores
        is.setEncoding("UTF-8");
        xr.parse(is);

        // Asignamos al vector categories los datos parseados
        categories = myExampleHandler.getParsedData();
        System.out.println(myExampleHandler.getParsedData());


    } catch (Exception e) {
        // Ha ocurrido algún error
        Log.e("Ideas4All", "Error", e);
    }

}
Hariharan
  • 24,741
  • 6
  • 50
  • 54
Soft Line
  • 37
  • 1
  • 9

2 Answers2

0

For that you must have to call your method loadCategories() in asynch task in doInBackground method

because after 4.0 it does't allow to network call on your main ui theread.

    new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... params) {
                    // TODO Auto-generated method stub
                                   loadCategories();
                    return null;
                }
            }.execute();
GovindRathod
  • 867
  • 1
  • 8
  • 22
0
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Android
  • 8,995
  • 9
  • 67
  • 108