android - memoryleak in gridview using base adapter and viewholder method -


i using extended baseadapter gridview in implement viewholder methods. pass data cursor adapter.

here getview()

public view getview(int position, view view, viewgroup parent) {    // inflate layout each item of listview          viewholder holder;         if (view == null) {             view = inflater.inflate(griditemid, null);             log.d("recyvleview", "inflating " + position);              holder = new viewholder();             holder.tvattachment = (imageview) view.findviewbyid(r.id.iv_inventory_products_griditems_attachment);             holder.imagecount = (textview) view.findviewbyid(r.id.imagecount);             holder.tvitemcode = (textview) view.findviewbyid(r.id.tv_inventory_products_griditems_itemcode);             holder.tvproductname = (textview) view.findviewbyid(r.id.tv_inventory_products_griditems_title);             holder.tvprice = (rialtextview) view.findviewbyid(r.id.tv_inventory_products_griditems_price);             holder.tvremain = (textview) view.findviewbyid( r.id.tv_inventory_products_griditems_remain);             holder.btnmore =(com.rey.material.widget.button) view.findviewbyid(r.id.btn_inventory_products_griditems_more);             holder.btnplus = (com.rey.material.widget.button) view.findviewbyid(r.id.btn_inventory_products_griditems_addone);              view.settag(holder);         } else {             log.d("recyvleview", "restoring " + position);             holder = (viewholder) view.gettag();         }          setupview(view, position,holder);           //setupgridview(view,holder);           return view;     } 

i noticed have huge memory leak in tried minimize find leak, commented of methods , here has been left setupview:

private void setupview(view view, int position, viewholder holder) {          // move cursor required position          cursor.movetoposition(position);         log.d("position", string.valueof(position));           //holder.itemid = cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_item_id.tostring()));         //tsimpleproduct tempproduct = productcatalog.getsimpleproductbyid(integer.parseint(holder.itemid));         //holder.itemguid = cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_guid.tostring()));         holder.tvitemcode.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemcode.tostring())));         holder.tvproductname.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemdesc.tostring())));        /*  //remain         if (cybersetting.getsettingvalue(tcybersettingkey.showitemremain).equals("1")) {             texttemp = (mcontext.getstring(r.string.restrictedinfo));         } else {             if (tempproduct.getdefaultunitvalue() == 2 && tempproduct.isunitdependent()) {                 string titleremain2 = databasecolumncontent.col_product_cursor_remain2.tostring();                 texttemp = cursor.getstring(cursor.getcolumnindex(titleremain2));             }             if (cybersetting.getsettingvalue(tcybersettingkey.showitemremain).equals("2")) {                 if (texttemp == null) {                     texttemp = "0";                 }                 int t = integer.parseint(texttemp);                 if (t > 0) {                     texttemp = mcontext.getstring(r.string.productavailable);                 } else {                     texttemp = mcontext.getstring(r.string.productunavailable);                 }             }         }         holder.tvremain.settext(texttemp);          //price         string pricelevel = "0";         try {             register register = register.getinstance();             pricelevel = register.getpricelevel();         } catch (nodaosetexception e) {             e.printstacktrace();         }         if(!pricelevel.equals("0"))             texttemp = cursor.getstring(cursor.getcolumnindex(pricelevel));         else             texttemp = "0.0";          if (tempproduct.getdefaultunitvalue() == 2 && tempproduct.isunitdependent()) {             double price2;             price2 = tlineitem.convertprice1toprice2(double.parsedouble(texttemp), tempproduct.isunit1bigger(), tempproduct.getunitcoef());             texttemp = tgeneraltools.convertdoubletoenglishstring(price2);             if (tempproduct.getunitdesc2() != null && !tempproduct.getunitdesc2().equals(""))                 unitdesc = " (" + tempproduct.getcompleteunitdesc2() + ")";         } else {             if (tempproduct.getunitdesc1() != null && !tempproduct.getunitdesc1().equals(""))                 unitdesc = " (" + tempproduct.getcompleteunitdesc1() + ")";         }         holder.pricedef = texttemp;         holder.tvprice.settext(texttemp + unitdesc);          holder.tvremain.settext(holder.tvremain.gettext() + unitdesc);           //image         picturecatalog = tpicturecatalog.getinstance();         string defguid = "";          if (tempproduct.gethasattachcontent() >= 1 && picturecatalog.isdownloadedalbumavailable()) {             defguid = picturecatalog.getdefaultpictureguid(holder.itemguid);             if (tempproduct.gethasattachcontent() == 1) {                 holder.imagecount.setvisibility(view.gone);             } else {                 holder.imagecount.setvisibility(view.visible);                 holder.imagecount.settext(string.valueof(tempproduct.gethasattachcontent()));             }         } else {             holder.imagecount.setvisibility(view.gone);         }          string filename = environment.getexternalstoragedirectory().getpath()                 + fileaddresscontent.application_home_directory                 + fileaddresscontent.pictures_root_directory                 //+ fileaddresscontent.pictures_thumbs_directory.tostring()                 + defguid + fileaddresscontent.pictures_extension;         pic = new file(filename);         if (pic.exists())             picasso.with(mcontext)                     .load(pic)                     .error(r.drawable.noimage)                             //.placeholder(r.drawable.loading)                     .resize(thumbsize, thumbsize)                     .centerinside()                     .into(holder.tvattachment);         else             picasso.with(mcontext)                     .load(r.drawable.noimage)                     .resize(thumbsize, thumbsize)                     .centerinside()                     .into(holder.tvattachment);         holder.tvattachment.setminimumheight(thumbsize);           view.settag(holder);*/      } 

even though of commented, these 2 lines still leaking, know cause when commented them out, no leak there ... !

 holder.tvitemcode.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemcode.tostring())));         holder.tvproductname.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemdesc.tostring()))); 

also holder class :

public class viewholder {     public imageview tvattachment;     public imageview ivstatus;     public textview imagecount;     public textview tvitemcode;     public textview tvproductname;     public textview tvremain;     public rialtextview tvprice;      public string pricedef;     public string itemid;     public string itemguid;     public button btnmore;     public button btnplus;  } 

any suggestion, please ?! how can stop leaking ?! in advance!

edit: same result using cursor adapter well.

why using baseadapter? android api has cursoradapter , cursorloader handles cursor stuff. looks doing wrong cursors , causes memory leaks.


Comments

Popular posts from this blog

How to provide Authorization & Authentication using Asp.net, C#? -

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

How to use Authorization & Authentication in Asp.net, C#? -