如何设置消息,当我得到例外

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

我在这个类中获得了parsing数据的exception。 我想在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); } } 

这是我的class级,我想打印该消息

Solutions Collecting From Web of "如何设置消息,当我得到例外"

你可以简单地用Try/Catch块来包围你的代码,如下所示:

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

这样,您不必在XMLParser类中进行任何更改,并且可以轻松地处理在主类本身中parsing代码时发生的任何exception。 此外,为了显示错误信息, Toast是我认为最好的事情。

希望这有助于..谢谢。

我会说,在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 } ....... ....... } 

要显示来自非活动类的消息,您需要将当前活动上下文作为:

 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(); // im getting Exception here return null; } catch (IOException e) { Log.e("Error: ", e.getMessage()); Toast.makeToast(context, e.toString(), Toast.Long).show(); return null; } 

只需将构造函数传递给XMLParser类,并将其用作构造函数。 或者,你可以尝试使用getApplicationContext()当你得到像下面这样的exception时,你可以简单地显示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 // im 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; } ...... } 

而且,在你的XMLParser类中使用这个con作为你的构造函数。