title: android.os.NetworkOnMainThreadException on service start on android
body: <p>after trying my brand new service on android i get this:</p>
  
  <p>i guess is something related to the manifest file and permissions, the service is started after the last activity, to update data on server and retrieve new data and save id on sqlite on android:</p>
  
  <p>here also the manifest file:</p>
  
  <pre><code> &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.ggservice.democracy"
          android:versionCode="1"
          android:versionName="1.0" &gt;
  
          &lt;uses-sdk
              android:minSdkVersion="8"
              android:targetSdkVersion="17" /&gt;
          &lt;uses-permission android:name="android.permission.INTERNET"/&gt;
  
          &lt;application
              android:allowBackup="true"
              android:icon="@drawable/ic_launcher"
              android:label="@string/app_name"
              android:theme="@style/AppTheme" &gt;
              &lt;activity
                  android:name="com.ggservice.democracy.MainActivity"
                  android:label="@string/app_name" &gt;
                  &lt;intent-filter&gt;
                      &lt;action android:name="android.intent.action.MAIN" /&gt;
  
                      &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
                  &lt;/intent-filter&gt;
              &lt;/activity&gt;
              &lt;activity android:label="@string/app_name" android:name="com.ggservice.democracy.sondaggioActivity"/&gt;
              &lt;activity android:label="@string/app_name" android:name="com.ggservice.democracy.domandeDiCategoria"/&gt;
              &lt;service android:name="com.ggservice.democracy.updateDemocracyService" /&gt;
          &lt;/application&gt;
  
      &lt;/manifest&gt;
  </code></pre>
  
  <p>the logcat:</p>
  
  <pre><code>01-02 15:33:30.960: W/dalvikvm(2570): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
  01-02 15:33:31.160: E/AndroidRuntime(2570): FATAL EXCEPTION: main
  01-02 15:33:31.160: E/AndroidRuntime(2570): java.lang.RuntimeException: Unable to start service com.ggservice.democracy.updateDemocracyService@412f0c60 with Intent { cmp=com.ggservice.democracy/.updateDemocracyService }: android.os.NetworkOnMainThreadException
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2376)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.app.ActivityThread.access$1900(ActivityThread.java:123)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.os.Handler.dispatchMessage(Handler.java:99)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.os.Looper.loop(Looper.java:137)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.app.ActivityThread.main(ActivityThread.java:4424)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at java.lang.reflect.Method.invokeNative(Native Method)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at java.lang.reflect.Method.invoke(Method.java:511)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at dalvik.system.NativeStart.main(Native Method)
  01-02 15:33:31.160: E/AndroidRuntime(2570): Caused by: android.os.NetworkOnMainThreadException
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at java.net.InetAddress.getAllByName(InetAddress.java:220)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at com.ggservice.democracy.JSONParser.getJSONFromUrl(JSONParser.java:38)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at com.ggservice.democracy.updateDemocracyService.onStartCommand(updateDemocracyService.java:47)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359)
  01-02 15:33:31.160: E/AndroidRuntime(2570):     ... 10 more
  </code></pre>
  
  <p>am i doing something wrong?</p>
  
  <p>this is also the service:</p>
  
  <pre><code>public class updateDemocracyService extends Service{
      private pollDataSource datasource;
       int mStartMode;       // indicates how to behave if the service is killed
          IBinder mBinder;      // interface for clients that bind
          boolean mAllowRebind; // indicates whether onRebind should be used
          // url to make request
          private static String url = "http://www.test.com/democracy/domande.php";
  
          // JSON Node names
          private static final String TAG_DOMANDE = "domande";
          private static final String TAG_ID = "id";
          private static final String TAG_TESTO = "testo";
  
  
          // contacts JSONArray
          JSONArray contacts = null;
  
          @Override
          public void onCreate() {
              // The service is being created
              datasource = new pollDataSource(this);
              datasource.open();
  
          }
          @Override
          public int onStartCommand(Intent intent, int flags, int startId) {
  
              // Creating JSON Parser instance
              JSONParser jParser = new JSONParser();
  
              // getting JSON string from URL
              JSONObject json = jParser.getJSONFromUrl(url);
  
              try {
                  // Getting Array of Contacts
                  contacts = json.getJSONArray(TAG_DOMANDE);
  
                  // looping through All Contacts
                  for(int i = 0; i &lt; contacts.length(); i++){
                      JSONObject c = contacts.getJSONObject(i);
  
                      // Storing each json item in variable
                      String id = c.getString(TAG_ID);
                      String name = c.getString(TAG_TESTO);
                      datasource.createCategoria(name);
                  }
              } catch (JSONException e) {
                  e.printStackTrace();
              }
  
  
  
  
              Toast.makeText(this, "ho comunicato con un server!", Toast.LENGTH_LONG).show();  
              return mStartMode;
          }
          @Override
          public IBinder onBind(Intent intent) {
              // A client is binding to the service with bindService()
              return mBinder;
          }
          @Override
          public boolean onUnbind(Intent intent) {
              // All clients have unbound with unbindService()
              return mAllowRebind;
          }
          @Override
          public void onRebind(Intent intent) {
              // A client is binding to the service with bindService(),
              // after onUnbind() has already been called
          }
          @Override
          public void onDestroy() {
              datasource.close();
              // The service is no longer used and is being destroyed
          }
  
  
  }
  </code></pre>