2012-10-16 45 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)); 
    } 
} 

我在此類中解析數據時遇到異常。我想在另一個從Activity擴展的類中打印這條消息。你能告訴我怎麼樣?我試過很多,但沒能做到..當我收到異常時如何設置消息

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

} 

這是我的班,我想打印該消息

+0

在'XMLParser'中實現一個接口。並在那裏設置結果... –

+0

我希望你的問題解決了。我對嗎? – Praveenkumar

回答

1

簡單的構造函數傳遞到您的XMLParser類,並使用了那裏,你的構造。或者,你可以使用getApplicationContext()嘗試你可以簡單地顯示Toast當你得到一個例外,像下面 -

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

更新

好吧,只是通過構造按如下 - 你在哪裏調用一個XMLparser類只需調用像下面 -

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

而且,在XMLParser班上有提及你的構造類似下面 -

public class XMLParser { 

    Context con; 

    public XMLParser(Context context) { 

     con = context; 

    } 
...... 
} 

而且,使用此con作爲您的構造函數在您的XMLParser類中。

+0

但是Exception不會擴展Activity類我將如何打印? – user1748932

+0

@ user1748932嘗試更新的代碼。而且,首先嚐試使用'getApplicationContext()'或將上下文傳遞給''parseXML'類並在那裏使用它。 – Praveenkumar

+0

,我想知道如何傳遞上下文到parsexml類 – user1748932

1

對於顯示來自非活動課的消息,您將需要通過當前活動上下文爲:

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

這樣:

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

你可以簡單地用一個Try/Catch塊這樣的包圍你的代碼您無需對類XMLParser進行任何更改,並且可以輕鬆處理在主類本身中解析代碼時發生的任何異常。另外,爲了顯示錯誤信息,Toast是我認爲最好的。

希望這有助於..謝謝。

2

我會說,在XMLParser.getDomElement()方法添加throws SAXException,在這種方法不抓SAXException:以希望的方式

public Document getDomElement(String xml) throws SAXException { 

漁獲AndroidXMLParsingActivity.ShowData()SAXException你在哪裏調用getDomElement()方法和打印信息例如

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

沒有它不是我trieed應用此thenAndroidXMLParsingActivity無法PIC異常 – user1748932

+0

請告訴你們的電子郵件我會送U源代碼,它的小工作,但我不知道這裏即時做錯了我嘗試從最近2天無法實現它做plz幫助我 – user1748932

+0

它不存在,請告訴我UR郵件ID我會發送完整的源代碼,好讓你能理解即時通訊做錯了,請幫我 – user1748932

相關問題