display a listView using Activity(not ListActivity) and asyncTask onPostExecute() android -


when run application crashes. noticed problem appears when write list.setadapter(adapter); in postexecute(). can me? thanks.

in searchbykey activity user can choose items list

public class searchbykey extends sherlockactivity {      actionbar actionbar;     listview listview;     arrayadapter<string> adapter;     double latitude, longitude;     public static arraylist<hashmap<string, string>> xml_results;     public progressdialog progressdialog;      intent intentresults ;     int k=0;     //xml node keys     static final string key_env = "environment"; // parent node     static final string key_title = "title";     static final string key_feed = "feed";     static final string key_id = "id";     static final string key_lat = "lat";     static final string key_lon = "lon";     static final string key_dif_lat = "dif lat";     static final string key_dif_lon = "dif lon";     static final string key_name = "name";     static final string key_desc = "description";      string[] countries = new string[] {             "india",             "pakistan",             "sri lanka",             "china",             "bangladesh",             "nepal",             "afghanistan",             "north korea",             "south korea",             "japan"     };      /** called when activity first created. */     @override     public void oncreate(bundle savedinstancestate) {          super.oncreate(savedinstancestate);         setcontentview(r.layout.keylist);          actionbar=getsupportactionbar();         actionbar.settitle("search keyword(s)");          //-------get location calculate previus acrivity. before activity start.          bundle extras = getintent().getextras();         if (extras == null)          {             system.out.println("none");         }          //get data via key         latitude = extras.getdouble("latitude");         longitude = extras.getdouble("longitude");           //----------i have location service detect location , send broadcast msg. here declare register listen broadcast msg location          intentfilter filter = new intentfilter("xxx.yyy.intent.action.location");         this.registerreceiver(new locationreceiver(), filter);          //the checkbox each item specified layout android.r.layout.simple_list_item_multiple_choice         arrayadapter<string> adapter = new arrayadapter<string>(this, android.r.layout.simple_list_item_multiple_choice, countries);          //getting reference listview object of layout         listview = (listview) findviewbyid(r.id.listview);          //setting adapter listview         listview.setadapter(adapter);      }      @override     public boolean oncreateoptionsmenu(menu menu) {          getsupportmenuinflater().inflate(r.menu.keywordmenu, menu);          (menu.finditem(r.id.search)).seticon(r.drawable.action_search);         (menu.finditem(r.id.clear)).seticon(r.drawable.abs__ic_clear);          //return(true);         return super.oncreateoptionsmenu(menu);     }      public boolean onoptionsitemselected(menuitem item) {          switch (item.getitemid()) {             case r.id.search:              //-----------call new activity appears search result                intentresults = new intent (this, keysearch_results.class);             startactivity(intentresults);              break;         case r.id.clear:             clearselections();         break;         }         return true;      }     }  //-----the keysearch_results activity want take info url (xml parser) , appear result of search public class keysearch_results extends sherlockactivity {      //xml node keys     static final string key_env = "environment"; // parent node     static final string key_title = "title";     static final string key_feed = "feed";     static final string key_id = "id";     static final string key_lat = "lat";     static final string key_lon = "lon";     static final string key_dif_lat = "dif lat";     static final string key_dif_lon = "dif lon";     static final string key_name = "name";     static final string key_desc = "description";       public progressdialog progressdialog;      public arraylist<hashmap<string, string>> listitems;      //menu bar     actionbar actionbar;      //list     listview listview;     arrayadapter<string> adapter;      //user location     double latitude, longitude;      /** called when activity first created. */     @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.results);          //appear action bar         actionbar=getsupportactionbar();         actionbar.settitle("results");           //getting reference listview object of layout         listview = (listview) findviewbyid(r.id.reslist);          listadapter adapter = new simpleadapter(this, listitems,                 r.layout.result_row,                 new string[] { "feed", "dif lat",}, new int[] {                         r.id.name, r.id.dif});     new yourdownload().execute();      }   private class yourdownload extends asynctask<void, void, integer> {       // private string content;        @override      protected integer doinbackground(void... params) {           if(isonline()){             listitems.clear();                int i;              hashmap<string, string> map = null;              xmlparser parser = new xmlparser();             //getting xml             string xml = null ;           defaulthttpclient client = new defaulthttpclient();             httpget request = new httpget();             try {                 request.seturi(new uri("http://api.cosm.com/v2/feeds.xml?&key=sov51taorgtao6w_junodpn3kmqsakxuzjfsblr3tup4tt0g&lat=35.1446170529352&lon=33.3462524414062"));             } catch (urisyntaxexception e) {                  e.printstacktrace();                 system.out.print("http\n");             }             httpresponse httpresponse = null;             try {                 httpresponse = client.execute(request);             } catch (clientprotocolexception e1) {                  e1.printstacktrace();             } catch (ioexception e1) {                  e1.printstacktrace();             }             httpentity httpentity = httpresponse.getentity();             try {                 xml = entityutils.tostring(httpentity);             } catch (parseexception e1) {                 e1.printstacktrace();             } catch (ioexception e1) {                  e1.printstacktrace();             }               //getting dom element             document doc = parser.getdomelement(xml);               nodelist nl = doc.getelementsbytagname(key_env);           //int size=nl.getlength();              // looping through item nodes <item>             (i = 0; < nl.getlength(); i++) {                 // creating new hashmap                 map = new hashmap<string, string>();                 element e = (element) nl.item(i);                 // adding each child node hashmap key => value                 map.put(key_feed, parser.getvalue(e, key_feed));                 map.put(key_dif_lat, parser.getvalue(e, key_lat));                 map.put(key_dif_lon, parser.getvalue(e, key_lon));                 listitems.add(map);             }          }          else{             toast.maketext(keysearch_results.this, "no connection..", toast.length_long).show();                     }              return 1;         }       @override      protected void onpostexecute(integer result) {           if(result==1 && listitems!=null)          {           listview.setadapter(adapter);          }          progressdialog.dismiss();          super.onpostexecute(result);      }       } } 

list layout:

<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:orientation="vertical" >   <textview android:id="@+id/name"       android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:padding="10dp"     android:textappearance="?android:attr/textappearancemedium"     android:textstyle="bold"     android:textsize="16sp" >   </textview>     <textview android:id="@+id/dif"     android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:padding="10dp"     android:textappearance="?android:attr/textappearancemedium"     android:textstyle="bold"     android:textsize="16sp" > </textview>     <textview android:id="@+id/dd"      android:layout_width="wrap_content"      android:layout_height="wrap_content"     android:padding="10dp"     android:textappearance="?android:attr/textappearancemedium"     android:textstyle="bold"     android:textsize="16sp" >   </textview>   </linearlayout> 

errors:

    04-06 19:50:30.326: e/activitythread(795): activity com.example.ioaaan.searchbykey has leaked intentreceiver com.example.ioaaan.searchbykey$locationreceiver@40cdb248 registered here. missing call unregisterreceiver()?     04-06 19:50:30.326: e/activitythread(795): android.app.intentreceiverleaked: activity com.example.ioaaan.searchbykey has leaked intentreceiver com.example.ioaaan.searchbykey$locationreceiver@40cdb248 registered here. missing call unregisterreceiver()?     04-06 19:50:30.326: e/activitythread(795):  @ android.app.loadedapk$receiverdispatcher.<init>(loadedapk.java:795)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.loadedapk.getreceiverdispatcher(loadedapk.java:596)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.contextimpl.registerreceiverinternal(contextimpl.java:1316)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.contextimpl.registerreceiver(contextimpl.java:1296)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.contextimpl.registerreceiver(contextimpl.java:1290)     04-06 19:50:30.326: e/activitythread(795):  @ android.content.contextwrapper.registerreceiver(contextwrapper.java:423)     04-06 19:50:30.326: e/activitythread(795):  @ com.example.ioaaan.searchbykey.oncreate(searchbykey.java:121)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.activity.performcreate(activity.java:5104)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1080)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.activitythread.performlaunchactivity(activitythread.java:2144)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.activitythread.handlelaunchactivity(activitythread.java:2230)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.activitythread.access$600(activitythread.java:141)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.activitythread$h.handlemessage(activitythread.java:1234)     04-06 19:50:30.326: e/activitythread(795):  @ android.os.handler.dispatchmessage(handler.java:99)     04-06 19:50:30.326: e/activitythread(795):  @ android.os.looper.loop(looper.java:137)     04-06 19:50:30.326: e/activitythread(795):  @ android.app.activitythread.main(activitythread.java:5041)     04-06 19:50:30.326: e/activitythread(795):  @ java.lang.reflect.method.invokenative(native method)     04-06 19:50:30.326: e/activitythread(795):  @ java.lang.reflect.method.invoke(method.java:511)     04-06 19:50:30.326: e/activitythread(795):  @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:793)     04-06 19:50:30.326: e/activitythread(795):  @ com.android.internal.os.zygoteinit.main(zygoteinit.java:560)     04-06 19:50:30.326: e/activitythread(795):  @ dalvik.system.nativestart.main(native method) 

sorry errors new in android application , can not understand how fix errors

to register , unregister broadcastreceiver try this:

1.

//declare global in class. private locationreceiver locationreceiver = new locationreceiver(); 

then in oncreate()

intentfilter filter = new intentfilter("xxx.yyy.intent.action.location");     this.registerreceiver(locationreceiver, filter); 

then in ondestroy() unregister locationreceiver this:

@override protected void ondestroy() {     if (locationreceiver != null) {         locationreceiver.cancel(true);     }     try {         unregisterreceiver(locationreceiver);     } catch (exception e) {         log.e("unregister receiver error", "> " + e.getmessage());     }     super.ondestroy(); } 

2. if doesn't delete locationreceiver class , declare bellow variable, work same locationreceiver:

private final broadcastreceiver locationreceiver = new broadcastreceiver() {     @override     public void onreceive(context context, intent calledintent)          log.d("loc_receiver", "location received!");           latitude = calledintent.getdoubleextra("latitude", -1);          longitude = calledintent.getdoubleextra("longitude", -1);                 } }; 

then in oncreate(), register locationreceiver this:

intentfilter filter = new intentfilter("xxx.yyy.intent.action.location");     this.registerreceiver(locationreceiver, filter); 

then in ondestroy() unregister locationreceiver this:

@override protected void ondestroy() {     if (locationreceiver != null) {         locationreceiver.cancel(true);     }     try {         unregisterreceiver(locationreceiver);     } catch (exception e) {         log.e("unregister receiver error", "> " + e.getmessage());     }     super.ondestroy(); } 

hope help. way, have used 2nd approach in project.


Comments

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

java Extracting Zip file -

C# WinForm - loading screen -