2012-10-16 18 views
7
public class XMLParser { 

    // constructor 
    public XMLParser() { 

    } 


    public String getXmlFromUrl(String url) { 
     String responseBody = null; 

     getset d1 = new getset(); 
     String d = d1.getData(); // text 
     String y = d1.getYear(); // year 
     String c = d1.getCircular(); 
     String p = d1.getPage(); 

     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("YearID", y)); 

     nameValuePairs.add(new BasicNameValuePair("CircularNo", c)); 

     nameValuePairs.add(new BasicNameValuePair("SearchText", d)); 
     nameValuePairs.add(new BasicNameValuePair("pagenumber", p)); 
     try { 

      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 

      HttpEntity entity = response.getEntity(); 

      responseBody = EntityUtils.toString(entity); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // return XML 
     return responseBody; 
    } 


    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()); 

      // i m getting Exception here 

      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)); 
    } 
} 

Otrzymuję wyjątek w tej klasie do parsowania danych. Chcę wydrukować tę wiadomość w innej klasie, która rozciąga się od działania. Czy możesz mi powiedzieć, jak? Próbowałem wiele, ale nie jest w stanie zrobić ..Jak ustawić wiadomość, gdy otrzymuję wyjątek

public class AndroidXMLParsingActivity extends Activity { 

    public int currentPage = 1; 
    public ListView lisView1; 
    static final String KEY_ITEM = "docdetails"; 
    static final String KEY_NAME = "heading"; 
    public Button btnNext; 
    public Button btnPre; 
    public static String url = "http://dev.taxmann.com/TaxmannService/TaxmannService.asmx/GetNotificationList"; 

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

     // listView1 
     lisView1 = (ListView) findViewById(R.id.listView1); 

     // Next 
     btnNext = (Button) findViewById(R.id.btnNext); 
     // Perform action on click 
     btnNext.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       currentPage = currentPage + 1; 
       ShowData(); 
      } 
     }); 

     // Previous 
     btnPre = (Button) findViewById(R.id.btnPre); 
     // Perform action on click 
     btnPre.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       currentPage = currentPage - 1; 
       ShowData(); 
      } 
     }); 

     ShowData(); 
    } 

    public void ShowData() { 
     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); 

     int displayPerPage = 5; // Per Page 
     int TotalRows = nl.getLength(); 
     int indexRowStart = ((displayPerPage * currentPage) - displayPerPage); 
     int TotalPage = 0; 
     if (TotalRows <= displayPerPage) { 
      TotalPage = 1; 
     } else if ((TotalRows % displayPerPage) == 0) { 
      TotalPage = (TotalRows/displayPerPage); 
     } else { 
      TotalPage = (TotalRows/displayPerPage) + 1; // 7 
      TotalPage = (int) TotalPage; // 7 
     } 
     int indexRowEnd = displayPerPage * currentPage; // 5 
     if (indexRowEnd > TotalRows) { 
      indexRowEnd = TotalRows; 
     } 

     // Disabled Button Next 
     if (currentPage >= TotalPage) { 
      btnNext.setEnabled(false); 
     } else { 
      btnNext.setEnabled(true); 
     } 

     // Disabled Button Previos 
     if (currentPage <= 1) { 
      btnPre.setEnabled(false); 
     } else { 
      btnPre.setEnabled(true); 
     } 

     // Load Data from Index 
     int RowID = 1; 
     ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 
     HashMap<String, String> map; 

     // RowID 
     if (currentPage > 1) { 
      RowID = (displayPerPage * (currentPage - 1)) + 1; 
     } 

     for (int i = indexRowStart; i < indexRowEnd; i++) { 
      Element e = (Element) nl.item(i); 
      // adding each child node to HashMap key => value 
      map = new HashMap<String, String>(); 
      map.put("RowID", String.valueOf(RowID)); 
      map.put(KEY_NAME, parser.getValue(e, KEY_NAME)); 

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

      RowID = RowID + 1; 

     } 

     SimpleAdapter sAdap; 
     sAdap = new SimpleAdapter(AndroidXMLParsingActivity.this, menuItems, 
       R.layout.list_item, new String[] { "RowID", KEY_NAME }, 
       new int[] { R.id.ColRowID, R.id.ColName }); 
     lisView1.setAdapter(sAdap); 
    } 

} 

tę moją klasę, gdzie chcę wydrukować tę wiadomość

+0

Zaimplementuj interfejs w swoim 'XMLParser'. I ustaw wyniki tam ... –

+0

Mam nadzieję, że Twój problem został rozwiązany. Czy mam rację? – Praveenkumar

Odpowiedz

1

Wystarczy przejść do konstruktora klasy XMLParser i używane, że jako konstruktora. Można też spróbować z wykorzystaniem getApplicationContext() można po prostu pokazać Toast kiedy coraz wyjątek jak poniżej -

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()); 
    Toast.makeToast(con, e.toString(), Toast.Long).show(); // Will show the message of exception 
    return null; 
} catch (SAXException e) { 
    Log.e("Error: ", e.getMessage()); 
    Toast.makeToast(con, e.toString(), Toast.Long).show(); // Will show the message of exception 
    // i m getting Exception here 
    return null; 
} catch (IOException e) { 
    Log.e("Error: ", e.getMessage()); 
    Toast.makeToast(con, e.toString(), Toast.Long).show(); // Will show the message of exception 
    return null; 
} 

Aktualizacji

porządku, po prostu przekazać konstruktora jak na poniżej - gdzie jesteś nazywając że XMLparser klasa zadzwoń jak poniżej -

.... 
XMLParser xml = new XMLParser(AndroidXMLParsingActivity.this); 
.... 

A w XMLParser klasie nie wspominając swój konstruktor jak poniżej -

public class XMLParser { 

    Context con; 

    public XMLParser(Context context) { 

     con = context; 

    } 
...... 
} 

Użyj tego con jako swojego konstruktora w klasie XMLParser.

+0

Ale wyjątek nie nadchodzi w rozszerzeniu klasy aktywności, w jaki sposób wydrukuję? – user1748932

+0

@ user1748932 Wypróbuj zaktualizowany kod. Najpierw spróbuj z 'getApplicationContext()' lub przekaż kontekst do klasy 'parseXML' i używaj tam. – Praveenkumar

+0

, który chcę wiedzieć, jak przekazać kontekst do klasy parsexml – user1748932

1

Za pokazanie Wiadomość od Non Klasa aktywności trzeba będzie przechodzić Obecny kontekst działalność jako:

public class XMLParser { 

Context context 
    // constructor 
    public XMLParser(Context conts) { 
    context =conts; 
    } 
///YOUR CODE 
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()); 
    Toast.makeToast(context, e.toString(), Toast.Long).show(); 
    return null; 
} catch (SAXException e) { 
    Log.e("Error: ", e.getMessage()); 
    Toast.makeToast(context, e.toString(), Toast.Long).show(); 
    // i m getting Exception here 
    return null; 
} catch (IOException e) { 
    Log.e("Error: ", e.getMessage()); 
    Toast.makeToast(context, e.toString(), Toast.Long).show(); 
    return null; 
} 
2

Można po prostu otoczyć swój kod z Try/Catch bloku jak ten:

String xml; 
Document doc; 
NodeList nl; 

try { 

    xml = parser.getXmlFromUrl(url); // getting XML 
    doc = parser.getDomElement(xml); // getting DOM element 
    nl = doc.getElementsByTagName(KEY_ITEM); 
} catch (Exception e) { 
    Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
} 

ten sposób nie musisz wprowadzać żadnych zmian w klasie XMLParser i możesz łatwo obsłużyć wszystkie wyjątki występujące podczas analizowania kodu w głównej klasie. Ponadto, dla wyświetlania komunikatów o błędach, najlepsza rzecz według mnie to Toast.

Mam nadzieję, że to pomoże .. Dzięki.

2

Powiedziałbym, dodać throws SAXException w XMLParser.getDomElement() metody i nie złapać SAXException w tej metodzie jako:

public Document getDomElement(String xml) throws SAXException { 

złapać SAXException w AndroidXMLParsingActivity.ShowData() gdzie dzwonisz getDomElement() metody i wydrukować wiadomość w pożądany sposób na przykład

public void ShowData() { 
    XMLParser parser = new XMLParser(); 
    String xml = parser.getXmlFromUrl(url); // getting XML 

    Document doc = null; 
    try{ 
      doc = parser.getDomElement(xml); // getting DOM element 
     }catch(SAXException sae){ 
     //print the desired message here 
     } 

     ....... 
     ....... 
} 
+0

Nie, nie, gdybym był gotowy do zastosowania tego wtedyAndroidXMLParsingActivity nie jest w stanie wyśledzić wyjątku – user1748932

+0

proszę powiedzieć, ur e-mailem, wyślę u Kod źródłowy to mała robota, ale nie wiem tutaj, robię źle, próbuję wdrożyć go z ostatnich 2 dni, nie jestem w stanie zrobić plz pomóż mi – user1748932

+0

jej tam nie proszę powiedz mi ur e-mail id poślę wysłać kompletny kod źródłowy, abyś mógł zrozumieć, gdzie robię źle pomóż mi – user1748932

Powiązane problemy