2012-10-16 47 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

相关问题