NetworkOnMainThreadException Jelly Error

I tried to get this to work last week or so and still don't know what the problem is. It works on Android 2.1, but not 4.1. ive got this line in a service that checks for updates in my application.

latestVersion = Integer.parseInt(getHttpString(urlLatestVersion)); 

it is called in checkForUpdate (); which is called on onStart (intent intention, int startId);

 private String getHttpString(String urlString) throws IOException { InputStream in = null; int response = -1; URL url = new URL(urlString); URLConnection conn = url.openConnection(); if (!(conn instanceof HttpURLConnection)) throw new IOException("Not an HTTP connection"); try { HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET"); httpConn.connect(); response = httpConn.getResponseCode(); if (response == HttpURLConnection.HTTP_OK) { in = httpConn.getInputStream(); } } catch (Exception ex) { ex.printStackTrace(); // //main error currently lies here // TODO fix errors that accures on android 4.0 and above. // } if (in != null) { StringBuilder sb = new StringBuilder(); String line; try { BufferedReader reader = new BufferedReader( new InputStreamReader(in, "UTF-8")); while ((line = reader.readLine()) != null) { sb.append(line); // .append("\n"); } } finally { in.close(); } return sb.toString(); } else return ""; } 

this is an error from logcat

 W/System.err( 7077): android.os.NetworkOnMainThreadException W/System.err( 7077): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) W/System.err( 7077): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) W/System.err( 7077): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) W/System.err( 7077): at java.net.InetAddress.getAllByName(InetAddress.java:214) W/System.err( 7077): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) W/System.err( 7077): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) W/System.err( 7077): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341) W/System.err( 7077): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) W/System.err( 7077): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) W/System.err( 7077): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) W/System.err( 7077): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) W/System.err( 7077): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) W/System.err( 7077): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) W/System.err( 7077): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) W/System.err( 7077): at com.lukemovement.roottoolbox.pro.Update.getHttpString(Update.java:166) W/System.err( 7077): at com.lukemovement.roottoolbox.pro.Update.checkForUpdate(Update.java:98) W/System.err( 7077): at com.lukemovement.roottoolbox.pro.Update.onStart(Update.java:75) W/System.err( 7077): at android.app.Service.onStartCommand(Service.java:450) W/System.err( 7077): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2620) W/System.err( 7077): at android.app.ActivityThread.access$1900(ActivityThread.java:143) W/System.err( 7077): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306) W/System.err( 7077): at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err( 7077): at android.os.Looper.loop(Looper.java:137) W/System.err( 7077): at android.app.ActivityThread.main(ActivityThread.java:4935) W/System.err( 7077): at java.lang.reflect.Method.invokeNative(Native Method) W/System.err( 7077): at java.lang.reflect.Method.invoke(Method.java:511) W/System.err( 7077): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) W/System.err( 7077): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) W/System.err( 7077): at dalvik.system.NativeStart.main(Native Method) I/Example update( 7077): Invalid int: "" 

so the android refused backward compatibility or just forgot to add this bit?

ive read that I need to use AsyncTask. but I can't get it to work for me, can someone help me with this please?

+7
source share
2 answers

From Android API v15, it does not require a heavy process running in the main thread. Therefore, you should move your logic to another thread, for example, the following source code:

 new Thread(new Runnable() { public void run() { // your logic } }).start(); 

Additional Information: Responsiveness

+8
source

just add this code to oncreate where u activity invokes Asynck.

the code: -

 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); 
0
source

All Articles