एक्सएमएल पार्सिंग विफलता

मैं एंड्रॉइड में एक्सएमएल पार्सर के लिए एक एप्लीकेशन लिख रहा हूं लेकिन जब मैं कोड डाउनलोड करता हूं और इसे चलाता हूं, तो यह पूरी तरह से चलता है,  लेकिन मैंने एक ही कोड लिखा लेकिन काम नहीं कर रहा, ऐसा क्यों?

क्या इसके लिए कोई शर्त है? इसमें मेरी मदद करो

मुझे XMLParser.java में कोई त्रुटि मिल रही है

package com.xmlparser;
import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.util.Log;

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();
            HttpPost httpPost = new HttpPost(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
        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));
        }
}

मेरी लॉग बिल्ली

11-22 15:35:53.675: E/AndroidRuntime(19208): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xmlparser/com.xmlparser.Xparser}: android.os.NetworkOnMainThreadException
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.os.Looper.loop(Looper.java:137)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.app.ActivityThread.main(ActivityThread.java:4898)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at java.lang.reflect.Method.invokeNative(Native Method)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at java.lang.reflect.Method.invoke(Method.java:511)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
11-22 15:35:53.675: E/AndroidRuntime(19208):    at dalvik.system.NativeStart.main(Native Method)
11-22 15:35:53.675: E/AndroidRuntime(19208): Caused by: android.os.NetworkOnMainThreadException
11-22 15:35:53.675: E/AndroidRuntime(19208):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)

    11-22 15:19:21.500: E/AndroidRuntime(16631):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at com.xmlparser.XMLParser.getXmlFromUrl(XMLParser.java:45)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at com.xmlparser.Xparser.onCreate(Xparser.java:37)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at android.app.Activity.performCreate(Activity.java:5206)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
    11-22 15:19:21.500: E/AndroidRuntime(16631):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)

यह मेरा Xparser.java है

package com.xmlparser;

import java.util.ArrayList;
import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class Xparser extends ListActivity {
    static final String URL = "http://api.androidhive.info/pizza/?format=xml";
   //XML key nodes
    static final String KEY_ITEM = "item";
    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
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xmlparser);
        ArrayList> menuItems = new ArrayList>();
        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL);// getting XML
        Document doc = parser.getDomElement(xml);// getting Dom Element

        NodeList n1 = doc.getElementsByTagName(KEY_ITEM);
        //looping through all item nodes 
        for(int i=0 ; i < n1.getLength(); i++){
            HashMap map = new HashMap();
            Element e = (Element) n1.item(i);
            //adding each child to Hashmap node key
            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));

            //adding HashList to ArrayList
            menuItems.add(map);
        }

   //Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(this, menuItems,
                R.layout.list_select_item,
                new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
                        R.id.name, R.id.desciption, R.id.cost });
    setListAdapter(adapter);


   //selecting single ListView item
    ListView lv = getListView();
    lv.setOnItemClickListener(new OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       //TODO Auto-generated method stub
        String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
        String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
        String desc = ((TextView) view.findViewById(R.id.desciption)).getText().toString();

        Intent in = new Intent();
        in.putExtra(KEY_NAME, name);
        in.putExtra(KEY_DESC, desc);
        in.putExtra(KEY_COST, cost);
        startActivity(in);
    }

    });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       //Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.xmlparser, menu);
        return true;
        }
}
1
जोड़ा संपादित
विचारों: 1
मेनिफेस्ट फ़ाइल में अपने होस्ट यूआरएल को इंटरनेट अनुमति भी देखें
जोड़ा लेखक Piyush, स्रोत
मुझे इस लाइन में त्रुटि मिल रही है HttpResponse httpResponse = httpClient.execute (httpPost);
जोड़ा लेखक Android Noob, स्रोत
यू मतलब यह ???? पकड़ो (असमर्थित एन्कोडिंग अपवाद ई) {e.printStackTrace (); } पकड़ो (क्लाइंटप्रोटोकॉल अपवाद ई) {e.printStackTrace (); } पकड़ो (IOException ई) {e.printStackTrace (); }
जोड़ा लेखक Android Noob, स्रोत
नहीं, मैंने यहां लगभग पूरी त्रुटि लॉग जोड़ दी है ....
जोड़ा लेखक Android Noob, स्रोत
मैंने मैनिफेस्ट फ़ाइल में आंतरिक अनुमति जोड़ दी है
जोड़ा लेखक Android Noob, स्रोत
कृपया जांचें कि मैंने Xparser.java जोड़ा है
जोड़ा लेखक Android Noob, स्रोत
आपको क्या त्रुटि मिली ??
जोड़ा लेखक subash, स्रोत
@Shrinivas अपना Xparser.java पोस्ट करें
जोड़ा लेखक Hariharan, स्रोत
नहीं, मेरा मतलब है कि आप अपने स्टैकट्रैक में अपवाद देखते हैं, अगर आपको कोई मिलता है। क्या आप अपने लॉग में अपवाद स्टैकट्रैक देखते हैं?
जोड़ा लेखक Blacklight, स्रोत
अपवाद के stacktrace कृपया पोस्ट करें!
जोड़ा लेखक Blacklight, स्रोत
आपको मिलने वाली त्रुटियों को पोस्ट करने की आवश्यकता है।
जोड़ा लेखक Blacklight, स्रोत
कृपया जो काम नहीं कर रहा है उसे जोड़ें। क्या आप अपवादों में चल रहे हैं? क्या कोई स्टैकट्रैक है?
जोड़ा लेखक FeinesFabi, स्रोत

1 उत्तर

अपवाद आपको सबकुछ बताता है आपको जानने की आवश्यकता है। आप मुख्य धागे पर डेटा जमा करने की कोशिश कर रहे हैं। एक अलग थ्रेड में नेटवर्किंग संचालन करें।

There's a link in the docs that explains it, and this might help you to move on.

4
जोड़ा
मुझे पता है कि मैं मूर्ख सवाल पूछ रहा हूं, मैंने पढ़ा और समझ लिया, लेकिन मुझे मदद की ज़रूरत है मुझे स्ट्रिंग xml = parser.getXmlFromUrl (यूआरएल);//XML दस्तावेज़ दस्तावेज़ = parser.getDomElement (xml) प्राप्त करना है;//हो रही डोम एलिमेंट नोडलिस्ट एन 1 = doc.getElementsByTagName (KEY_ITEM);//सभी आइटम नोड्स के माध्यम से लूपिंग के लिए (int i = 0; i <�स्ट्रिंग, स्ट्रिंग> मैप = नया हैश मैप <�स्ट्रिंग, स्ट्रिंग> (); तत्व ई = (तत्व) n1.item (i); AsyncTask के लिए ये लाइनें सही है?
जोड़ा लेखक Android Noob, स्रोत
हाँ एक टन धन्यवाद
जोड़ा लेखक Android Noob, स्रोत
मैं अभी भी सीख रहा हूं, मुझे बहुत कुछ पता नहीं है, क्या आप कृपया इसके साथ मेरी मदद कर सकते हैं, मुझे त्रुटि भी नहीं मिली, क्षमा करें :(
जोड़ा लेखक Android Noob, स्रोत
ठीक है हाँ, आप बिल्कुल सही हैं, बहुत बहुत धन्यवाद, मैंने लक्ष्य एसडीके लाइन और उसके काम को हटा दिया है, क्या आप कृपया मुझे लिंक प्रदान कर सकते हैं जहां मैं उस उदाहरण के लिए एक अलग थ्रेड बना सकता हूं जहां लक्ष्य एसडीके हनीकॉम या अधिक है? ?? धन्यवाद
जोड़ा लेखक Android Noob, स्रोत
लेकिन मेरे पास एक और प्रोजेक्ट है जो मैंने किया है, लेकिन वह फाइल चल रही है, क्यों ?????
जोड़ा लेखक Android Noob, स्रोत
यह इस सवाल से परे है और टिप्पणियों के लिए विशेष रूप से बहुत अधिक है। अगर आपको लगातार मदद की ज़रूरत है तो कृपया एक नया विशिष्ट प्रश्न पूछें।
जोड़ा लेखक Blacklight, स्रोत
मेरे उत्तर में आखिरी लिंक आपको पहले से ही एक महान उदाहरण दिखाता है। :) जैसा कि मैंने कहा, विशेष रूप से "अलग थ्रेड पर नेटवर्क ऑपरेशंस निष्पादित करें" अनुभाग में देखें।
जोड़ा लेखक Blacklight, स्रोत
कृपया वास्तव में मेरे लिंक देखें! आपने यह देखा होगा: यह केवल हनीकॉम्ब एसडीके या उच्चतर को लक्षित करने वाले अनुप्रयोगों के लिए फेंक दिया जाता है। पहले एसडीके संस्करणों को लक्षित करने वाले अनुप्रयोगों को उनके मुख्य ईवेंट लूप थ्रेड पर नेटवर्किंग करने की अनुमति है, लेकिन यह बहुत निराश है। शायद आपका अन्य प्रोजेक्ट एक अलग एसडीके को लक्षित करता है।
जोड़ा लेखक Blacklight, स्रोत
मैंने एक और लिंक जोड़ा, यह सब कुछ आपको चाहिए। विशेष रूप से "एक अलग थ्रेड पर नेटवर्क संचालन करें" पर देखें।
जोड़ा लेखक Blacklight, स्रोत