2013-07-23 6 views
-5

мой XML-анализатор не хочет показывать .. это мой код XML ParserNetworkOnMainThreadException (снова)

public class XMLParser { 
    public XMLParser(){ 

    } 
    public String getXmlFromUrl (String url){ 
     String xml = null; 
     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpGet httpPost = new HttpGet(url); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      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; 
    } 

    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) { 
      // TODO: handle exception 
      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; 
    } 
    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 ""; 

    } 
    public String getValue (Element item, String str){ 
     NodeList n = item.getElementsByTagName(str); 
     return this.getElementValue(n.item(0)); 

    } 

} 

и это мой главный

public class MainActivity extends ListActivity { 
    static final String URL = "http://api.androidhive.info/pizza/?format=xml"; 
    // XML node keys 
    static final String KEY_ITEM = "item"; // parent node 
    static final String KEY_ID = "id"; 
    static final String KEY_NAME = "name"; 
    static final String KEY_COST = "cost"; 
    static final String KEY_DESC = "description"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


    ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String,String>>(); 
    XMLParser parser = new XMLParser(); 
    String xml = parser.getXmlFromUrl(URL); 
    Document doc = parser.getDomElement(xml); 
    NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
    for (int i = 0; i < nl.getLength(); i++) { 
     HashMap<String, String> map = new HashMap<String, String>(); 
     Element e = (Element) nl.item(i); 
     map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
     map.put(KEY_NAME, parser.getValue(e, KEY_NAME)); 
     map.put(KEY_COST, "Rs." + parser.getValue(e, KEY_COST)); 
     map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); 

     menuItems.add(map); 
    } 

    ListAdapter adapter = new SimpleAdapter(this, menuItems, 
      R.layout.list_item, 
      new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] { 
        R.id.name, R.id.desciption, R.id.cost }); 

    setListAdapter(adapter); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

и это за ошибки

07-23 01:58:08.649: E/AndroidRuntime(1347): FATAL EXCEPTION: main 
07-23 01:58:08.649: E/AndroidRuntime(1347): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tr.tryjson/com.tr.tryjson.MainActivity}: android.os.NetworkOnMainThreadException 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.os.Looper.loop(Looper.java:137) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at dalvik.system.NativeStart.main(Native Method) 
07-23 01:58:08.649: E/AndroidRuntime(1347): Caused by: android.os.NetworkOnMainThreadException 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at com.tr.tryjson.JsonParser.getJSONFromUrl(JsonParser.java:37) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at com.tr.tryjson.MainActivity.onCreate(MainActivity.java:48) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.Activity.performCreate(Activity.java:5104) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
07-23 01:58:08.649: E/AndroidRuntime(1347):  ... 11 more 

пожалуйста, помогите мне ..

+1

1. Прочитайте свой логарифм. 2. Google "NetworkOnMainThreadException." 3. Вернитесь сюда, когда вы попытались внедрить AsyncTask и все еще не удалось. – 323go

ответ

0

Я думаю, проблема в том, что с последней версии Android вы не можете открыть интернет-соединение из основного или потока пользовательского интерфейса, так как это можно рассматривать как операцию блокировки. Вам нужно создать отдельный поток для этого, используя тему, в AsyncTask, грузчиком ...

LogCat является вашим другом, просто читать вывод:

07-23 01:58:08.649: E/AndroidRuntime(1347): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tr.tryjson/com.tr.tryjson.MainActivity}: android.os.NetworkOnMainThreadException 


Вы можете прочитать это должность для внедрения AsyncTAsk https://stackoverflow.com/a/6343299/588917

+0

Извините за свою жизнь, но я не копировал ваш комментарий. Я писал свой ответ, когда вы написали свой комментарий. Простите меня за то, что вы медленны, и для поиска какой-то ссылки, чтобы улучшить свой ответ и дать ссылку на какое-то место с кодом (я связался с источником, а не копированием, что вы меня навязываете). У таких людей, как ты, я вижу, что люди перестают отвечать на вопросы ... – AitorTheRed

Смежные вопросы