Pergunta

I am displaying Image in Android App from Hosted Server. So, I need to set StrictMode Policy.

But as I have checked, It requires Api 9 and I want to make it supportable in Api 8 also. So how can I solve this issue ? I am already using this in AsyncTask.

My Code :

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

If I am not using StrictMode then getting Error.

Logcat :

05-08 12:25:08.711: E/AndroidRuntime(27622): android.os.NetworkOnMainThreadException
05-08 12:25:08.711: E/AndroidRuntime(27622):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1208)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at java.net.InetAddress.lookupHostByName(InetAddress.java:388)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:239)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at com.mytestbuddy.careermirror.Profile$UserProfile.onPostExecute(Profile.java:193)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at com.mytestbuddy.careermirror.Profile$UserProfile.onPostExecute(Profile.java:1)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at android.os.AsyncTask.finish(AsyncTask.java:631)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at android.os.Looper.loop(Looper.java:155)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at android.app.ActivityThread.main(ActivityThread.java:5511)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at java.lang.reflect.Method.invoke(Method.java:511)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
05-08 12:25:08.711: E/AndroidRuntime(27622):    at dalvik.system.NativeStart.main(Native Method)
Foi útil?

Solução

To solve the NetworkOnMainThreadException you're seeing, read the HTTP response input stream in your doInBackground() and not in onPostExecute().

Outras dicas

StrictMode is available from 2.3 only, So you can't use it in 2.2.

There is tow possible ways I can give you.

  1. Go with 2.3 [or]
  2. Use AsyncTask in android.

I go with AsyncTsk

I hope this will help you.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top