Please see the following code.In following code I want to download some data from server when button is clicked.
public void fetch1(){
event=this;
// TODO Auto-generated method stub
try {
Runnable runnable = new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
try{
//dialog.show();
BufferedReader in = null;
String url=URLManager.orderUrl+DataFactory.userData.sid+"&dnumber="+DataFactory.userData.dnumber+"&from_date="+fromDateStr+"&to_date="+toDateStr; ;
// String login = "morris";
//String pass = "mor$ris";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
client.getCredentialsProvider().setCredentials(new AuthScope("newdev.objectified.com", 80), new UsernamePasswordCredentials(URLManager.user, URLManager.pass));
request.setURI(new URI(url));
HttpResponse response = client.execute(request);
in = new BufferedReader
(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
String page = sb.toString();
// Toast.makeText(event,url+"--::::--"+ page, Toast.LENGTH_LONG).show();
OrdersHandler handler=new OrdersHandler();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(handler);
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(page));
xr.parse(is);
Vector v=handler.getData();
DataFactory.ordersVector=v;
dataVector=DataFactory.ordersVector;
ordersId=new String[dataVector.size()];
for(int a=0;a<dataVector.size();a++){
OrdersData o=(OrdersData)dataVector.elementAt(a);
ordersId[a]=o.order_id;
}// end of the for
//event.setListAdapter(new IconicAdapter());
// adapter.clear();
// Create an ArrayAdapter, that will actually make the Strings above
// appear in the ListView
/*
for(int a=0;a<v.size();a++){
OrdersData o=(OrdersData)v.elementAt(a);
names=names+o.order_id+"\n";
}// end of the for loop
//String data=d.sid+"\n"+d.dtitle+"\n"+d.dcountry+"\n"+d.dcity;
Toast.makeText(event, names, Toast.LENGTH_LONG).show();
*/
}catch(Exception e){
}
}
});
}
};
new Thread(runnable).start();
//executeHttpGet();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, e+"", Toast.LENGTH_SHORT).show();
}
adapter.notifyDataSetChanged();
adapter.clear();
adapter=new IconicAdapter();
this.setListAdapter(adapter);
}// end of the fetch method
I want to refresh the ListActivity when data is downloaded using above method. but unfortunately app crashed .Please help I am new to android development
If you haven’t previously set the adapter, you’re running notifyDataSetChanged() and clear() on a null pointer. If it was already created, you create a new adapter and setListAdapter() anwyay: calling notifyDataSetChanged() would be pointless (old adapter is no longer displayed in the list, the new one is), and clear() is only of use if you need to do some cleaning up.
I think you’re trying to display a list of Strings as contained in ordersId[]? But you don’t pass it into the IconicAdapter. Is IconicAdapter an inner class?
Have a look at http://developer.android.com/reference/android/os/AsyncTask.html – preferred over Thread.