title: Unable to start activity ComponentInfo{
body: <p>I have the following mistake:</p>
  
  <pre><code>12-05 20:35:31.005: E/AndroidRuntime(1084): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helplawyer/com.example.helplawyer.AndroidXMLParsingActivity}: android.os.NetworkOnMainThreadException
  </code></pre>
  
  <p>in xml manifest I added <code>&lt;uses-permission android:name="android.permission.INTERNET" /&gt;</code></p>
  
  <p>this is my main class</p>
  
  <pre><code>package com.example.helplawyer;
  
  
  public class AndroidXMLParsingActivity extends ListActivity {
  
  // All static variables
  static final String URL = "http://www.consultant.ru/rss/hotdocs.xml";
  // XML node keys
  static final String KEY_ITEM = "item"; // parent node
  static final String KEY_TITLE = "title";
  static final String KEY_DATE = "pubDate";
  static final String KEY_LINK = "link";
  static final String KEY_DESC = "description";
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.mainxml);
  
      ArrayList&lt;HashMap&lt;String, String&gt;&gt; menuItems = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();
  
      XMLParser parser = new XMLParser();
      String xml = parser.getXmlFromUrl(URL); // getting XML
      Document doc = parser.getDomElement(xml); // getting DOM element
  
      NodeList nl = doc.getElementsByTagName(KEY_ITEM);
      // looping through all item nodes &lt;item&gt;
      for (int i = 0; i &lt; nl.getLength(); i++) {
          // creating new HashMap
          HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
          Element e = (Element) nl.item(i);
          // adding each child node to HashMap key =&gt; value
  
          map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
          map.put(KEY_LINK, parser.getValue(e, KEY_LINK));
          map.put(KEY_DATE, parser.getValue(e, KEY_DATE));
          map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
  
          // adding HashList to ArrayList
          menuItems.add(map);
      }
  
      // Adding menuItems to ListView
      ListAdapter adapter = new SimpleAdapter(this, menuItems,
              R.layout.list_item,
              new String[] { KEY_TITLE, KEY_DESC, KEY_DATE, KEY_LINK }, new int[] {
                      R.id.name, R.id.description, R.id.cost, R.id.link });
  
      setListAdapter(adapter);
  
      // selecting single ListView item
      ListView lv = getListView();
  
      lv.setOnItemClickListener(new OnItemClickListener() {
  
          public void onItemClick(AdapterView&lt;?&gt; parent, View view,
                  int position, long id) {
              // getting values from selected ListItem
              String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
              String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
              String link = ((TextView) view.findViewById(R.id.link)).getText().toString();
              String description = ((TextView) view.findViewById(R.id.description)).getText().toString();
  
              // Starting new intent
              Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
              in.putExtra(KEY_TITLE, name);
              in.putExtra(KEY_DATE, cost);
              in.putExtra(KEY_LINK, link);
              in.putExtra(KEY_DESC, description);
              startActivity(in);
  
          }
      });
  }
  </code></pre>
  
  <p>}</p>
  
  <p>XMLParser </p>
  
  <pre><code>package com.example.helplawyer;
  
  public class XMLParser {
  
  // constructor
  public XMLParser() {
  
  }
  
  /**
   * Getting XML from URL making HTTP request
   * @param url string
   * */
  public String getXmlFromUrl(String url) {
      String xml = null;
  
      try {
          // defaultHttpClient
          DefaultHttpClient httpClient = new DefaultHttpClient();
          HttpGet httpGet = new HttpGet(url);
  
          HttpResponse httpResponse = httpClient.execute(httpGet);
          HttpEntity httpEntity = httpResponse.getEntity();
          xml = EntityUtils.toString(httpEntity);
  
      } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
      } catch (ClientProtocolException e) {
          e.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      }
      // return XML
      return xml;
  }
  
  /**
   * Getting XML DOM element
   * @param XML string
   * */
  public Document getDomElement(String xml){
      Document doc = null;
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      try {
  
          DocumentBuilder db = dbf.newDocumentBuilder();
  
          InputSource is = new InputSource();
              is.setCharacterStream(new StringReader(xml));
              doc = db.parse(is); 
  
          } catch (ParserConfigurationException e) {
              Log.e("Error: ", e.getMessage());
              return null;
          } catch (SAXException e) {
              Log.e("Error: ", e.getMessage());
              return null;
          } catch (IOException e) {
              Log.e("Error: ", e.getMessage());
              return null;
          }
  
          return doc;
  }
  
  /** Getting node value
    * @param elem element
    */
   public final String getElementValue( Node elem ) {
       Node child;
       if( elem != null){
           if (elem.hasChildNodes()){
               for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                   if( child.getNodeType() == Node.TEXT_NODE  ){
                       return child.getNodeValue();
                   }
               }
           }
       }
       return "";
   }
  
   /**
    * Getting node value
    * @param Element node
    * @param key string
    * */
   public String getValue(Element item, String str) {     
          NodeList n = item.getElementsByTagName(str);        
          return this.getElementValue(n.item(0));
      }
  </code></pre>
  
  <p>}</p>
  
  <p>I read on <a href="https://stackoverflow.com/questions/8559381/e-androidruntime3306-java-lang-runtimeexception-unable-to-start-activity-com">stackoverflow</a> that I need to use <code>new Thread(new Runnable() {</code>
  but I don't understand how to rewrite my code that my app works good.
  Please, help me with my problem!
  Thank you</p>