title: How to use AsyncTask in Services in Android?
body: <p>I am trying to run below code it gives exception saying:</p>
  
  <pre><code> java.lang.RuntimeException: Unable to start service com.example.testfeeds.UpdateWidgetService@410a33c8 with Intent {  cmp=com.example.testfeeds/.UpdateWidgetService (has extras) }: android.os.NetworkOnMainThreadException
  </code></pre>
  
  <p>which i understand that new version of Android won't allow network operations in main thread. People suggested me to use Async Task
  but I don't know how to use that. Can someone show me in below code?</p>
  
  <p>Thanks in advance</p>
  
  <pre><code>public class WidgetService extends Service {
  /*
   * So pretty simple just defining the Adapter of the listview
   * here Adapter is ListProvider
   * */
  
  /*@Override
  public RemoteViewsFactory onGetViewFactory(Intent intent) {
      int appWidgetId = intent.getIntExtra(
              AppWidgetManager.EXTRA_APPWIDGET_ID,
              AppWidgetManager.INVALID_APPWIDGET_ID);
  
      return (new ListProvider(this.getApplicationContext(), intent));
  }*/
  
  public static int numberOfItems=0;
    //numberOfItems=0;
      private static  String LOG = "testwidgets";
      ArrayList&lt;String&gt; feedsPubDate;
        @SuppressWarnings("deprecation")
      @Override
        public void onStart(Intent intent, int startId) {
          Log.i(LOG, "Called");
          // Create some random data
          feedsPubDate=new ArrayList&lt;String&gt;(); 
          AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this .getApplicationContext());
          int[] allWidgetIds = intent
              .getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
          ComponentName thisWidget = new ComponentName(getApplicationContext(), WidgetProvider.class);
          int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
          Log.w(LOG, "From Intent" + String.valueOf(allWidgetIds.length));
          Log.w(LOG, "Direct" + String.valueOf(allWidgetIds2.length));
          for (int widgetId : allWidgetIds) {
            // Create some random data
  /////////////////////////////////////////////////////////////////////////// 
  
                RemoteViews remoteViews = new RemoteViews(this.getApplicationContext().getPackageName(),
                R.layout.widget_layout);
            Log.d("numberOfItems intially", String.valueOf(numberOfItems));
                try {
                  numberOfItems=doTestFeed();
              } catch (MalformedURLException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              } catch (ParseException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
            // Set the text
            remoteViews.setTextColor(R.id.empty_view,Color.WHITE);
            remoteViews.setTextViewText(R.id.empty_view,"  "+ String.valueOf(numberOfItems));
            Log.w(LOG, String.valueOf(numberOfItems));
  ////////////////////////////////////////////////////////////////////////////
  
            // Register an onClickListener
            Intent clickIntent = new Intent(this.getApplicationContext(),
                WidgetProvider.class);
            clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
            clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
                allWidgetIds);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, clickIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
            remoteViews.setOnClickPendingIntent(R.id.empty_view, pendingIntent);
            appWidgetManager.updateAppWidget(widgetId, remoteViews);
          }
          stopSelf();
          super.onStart(intent, startId);
  
        }
  
  
  
      @Override
      public IBinder onBind(Intent arg0) {
          // TODO Auto-generated method stub
          return null;
      }
  
  
      int doTestFeed() throws MalformedURLException, ParseException
      {  
          Log.d("msg"," in do test feed");
          InputStream is = null;
          int x = 0;
          URL myURL = new URL("http://yunn.yu.edu.jo/index.php?option=com_content&amp;view=category&amp;id=55&amp;layout=blog&amp;Itemid=104&amp;format=feed&amp;type=rss");
          try {
              URLConnection conn = myURL.openConnection();
               is = conn.getInputStream();
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          XmlPullParserFactory pullParserFactory;
          try {
              pullParserFactory = XmlPullParserFactory.newInstance();
              XmlPullParser parser = pullParserFactory.newPullParser();
                  parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
                  parser.setInput(is, null);
                  Log.d("msg","before making parsing");
                  x=parseXML(parser);
                  Log.d("msg","after making parsing");
          } catch (XmlPullParserException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
          Log.d("msg"," done testing");
          return x;
      }
  //////////////////////////////////////////////////////////////////////////////////
      @SuppressLint("SimpleDateFormat")
      private int parseXML(XmlPullParser parser) throws XmlPullParserException,IOException, ParseException
      {
          Log.d("msg"," in parser");
          int eventType = parser.getEventType();
          int getElement=0;
          String pubDate=null;
          while (eventType != XmlPullParser.END_DOCUMENT){
              String tagName = null;
              switch (eventType){
              //----------------------------------//
              case XmlPullParser.START_DOCUMENT: 
                  {
                      // do nothing
                  }
                  break;
             //----------------------------------//
               case XmlPullParser.START_TAG:
               { tagName = parser.getName();
                   if ("item".equals(tagName)){
                        getElement=1;
                   } else if (getElement!=0){
                        if ("pubDate".equals(tagName)){
                           pubDate= parser.nextText();
                           feedsPubDate.add(pubDate);
                           Log.d("value",pubDate);
                       }
                   }
               }
                   break;                     
             //----------------------------------//
               case XmlPullParser.END_TAG:
               { tagName = parser.getName();
                   if (tagName.equalsIgnoreCase("item") &amp;&amp; getElement != 0){
                   }
               }
                   break;
            //----------------------------------//
              }// end-switch.
              eventType= parser.next();
          }// end-while.
          int i=0;
          SharedPreferences sp = getSharedPreferences("tempData", 0);
          String dateStringA=sp.getString("recentPubDate", null);
          Log.d("oldest date",dateStringA);
          for(String s : feedsPubDate )
          {
          String dateStringB = feedsPubDate.get(i);
          SimpleDateFormat parserSDF = new SimpleDateFormat("EEE, DD MMM yyyy HH:mm:ss");
          Date dateA = null;
          try {
              dateA = parserSDF.parse(dateStringA);
          } catch (java.text.ParseException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          Date dateB = null;
          try {
              dateB = parserSDF.parse(dateStringB);
          } catch (java.text.ParseException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          if (dateA.compareTo(dateB) &lt; 0) {
              Log.d("imp msg","one new item");
              numberOfItems++;
          }
          i++;
          }
          Log.d("update result", String.valueOf(numberOfItems));
        // Toast.makeText(GeneralNews.this,"The size of the list"+feedsTitles.size() , Toast.LENGTH_LONG).show();
     return numberOfItems;
      } //end xmlParser method.
  //////////////////////////////////////////////////////////////////////////////////
   }
  </code></pre>