Reputation: 81
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));
}
}
I am getting Exception in this class for parsing data. I want print this message in another class which extends from Activity. Can you please tell me how? I tried much but not able to do..
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);
}
}
This my class where I want to Print that message
Upvotes: 7
Views: 1259
Reputation: 34367
I would say, add throws SAXException
in XMLParser.getDomElement()
method and don't catch SAXException
in this method as:
public Document getDomElement(String xml) throws SAXException {
Catch the SAXException
in AndroidXMLParsingActivity.ShowData()
where you are calling getDomElement()
method and print the message in the desired way e.g.
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
}
.......
.......
}
Upvotes: 2
Reputation: 24476
Simply pass the constructor to your XMLParser
class and used that there as your constructor. Or, you can try with use of getApplicationContext()
You can simply show the Toast
when you getting an exception like below -
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;
}
Update
Okay, just pass the constructor as per below - Where you are calling that XMLparser
class just call like below -
....
XMLParser xml = new XMLParser(AndroidXMLParsingActivity.this);
....
And, in XMLParser
class there mention your constructor like below -
public class XMLParser {
Context con;
public XMLParser(Context context) {
con = context;
}
......
}
And, use this con
as your constructor in your XMLParser
class.
Upvotes: 1
Reputation: 3822
You can simply surround your code with a Try/Catch
block like this:
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();
}
This way you don't have to make any changes in your XMLParser
class and you can easily handle any exceptions occurring while parsing your code in the main class itself. Also, for displaying error messages, Toast
is the best thing according to me.
Hope this helps.. Thanks.
Upvotes: 2
Reputation: 132982
For showing Message from Non Activity Class you will need to pass Current Activity Context as:
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;
}
Upvotes: 1