android - FATAL EXCEPTION in my app -


in app have error:

e/androidruntime(16123): fatal exception: main e/androidruntime(16123): java.lang.runtimeexception: unable start activity componentinfo{it.bisemanudev.mathtools/it.bisemanudev.mathtools.mainactivity}: android.view.inflateexception: binary xml file line #58: error inflating class <unknown> e/androidruntime(16123):    @ android.app.activitythread.performlaunchactivity(activitythread.java:2073) e/androidruntime(16123):    @ android.app.activitythread.handlelaunchactivity(activitythread.java:2098) e/androidruntime(16123):    @ android.app.activitythread.access$600(activitythread.java:138) e/androidruntime(16123):    @ android.app.activitythread$h.handlemessage(activitythread.java:1204) e/androidruntime(16123):    @ android.os.handler.dispatchmessage(handler.java:99) e/androidruntime(16123):    @ android.os.looper.loop(looper.java:137) e/androidruntime(16123):    @ android.app.activitythread.main(activitythread.java:4872) e/androidruntime(16123):    @ java.lang.reflect.method.invokenative(native method) e/androidruntime(16123):    @ java.lang.reflect.method.invoke(method.java:511) e/androidruntime(16123):    @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:790) e/androidruntime(16123):    @ com.android.internal.os.zygoteinit.main(zygoteinit.java:557) e/androidruntime(16123):    @ dalvik.system.nativestart.main(native method) e/androidruntime(16123): caused by: android.view.inflateexception: binary xml file line #58: error inflating class <unknown> e/androidruntime(16123):    @ android.view.layoutinflater.createview(layoutinflater.java:613) e/androidruntime(16123):    @ com.android.internal.policy.impl.phonelayoutinflater.oncreateview(phonelayoutinflater.java:56) e/androidruntime(16123):    @ android.view.layoutinflater.oncreateview(layoutinflater.java:660) e/androidruntime(16123):    @ android.view.layoutinflater.createviewfromtag(layoutinflater.java:685) e/androidruntime(16123):    @ android.view.layoutinflater.rinflate(layoutinflater.java:746) 

05-11 20:21:56.843: e/androidruntime(16123): @ android.view.layoutinflater.rinflate(layoutinflater.java:749) e/androidruntime(16123): @ android.view.layoutinflater.inflate(layoutinflater.java:489) e/androidruntime(16123): @ android.view.layoutinflater.inflate(layoutinflater.java:396) e/androidruntime(16123): @ android.view.layoutinflater.inflate(layoutinflater.java:352) e/androidruntime(16123): @ com.android.internal.policy.impl.phonewindow.setcontentview(phonewindow.java:361) e/androidruntime(16123): @ android.app.activity.setcontentview(activity.java:2043) e/androidruntime(16123): @ it.bisemanudev.mathtools.mainactivity.oncreate(mainactivity.java:27) e/androidruntime(16123): @ android.app.activity.performcreate(activity.java:5191) e/androidruntime(16123): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1082) e/androidruntime(16123): @ android.app.activitythread.performlaunchactivity(activitythread.java:2037) e/androidruntime(16123): ... 11 more e/androidruntime(16123): caused by: java.lang.reflect.invocationtargetexception e/androidruntime(16123): @ java.lang.reflect.constructor.constructnative(native method) e/androidruntime(16123): @ java.lang.reflect.constructor.newinstance(constructor.java:417) e/androidruntime(16123): @ android.view.layoutinflater.createview(layoutinflater.java:587) e/androidruntime(16123): ... 25 more e/androidruntime(16123): caused by: java.lang.outofmemoryerror e/androidruntime(16123): @ android.graphics.bitmapfactory.nativedecodeasset(native method) e/androidruntime(16123): @ android.graphics.bitmapfactory.decodestream(bitmapfactory.java:500) e/androidruntime(16123): @ android.graphics.bitmapfactory.decoderesourcestream(bitmapfactory.java:353) e/androidruntime(16123): @ android.graphics.drawable.drawable.createfromresourcestream(drawable.java:781) e/androidruntime(16123): @ android.content.res.resources.loaddrawable(resources.java:1969) e/androidruntime(16123): @ android.content.res.resources.getdrawable(resources.java:673) e/androidruntime(16123): @ android.graphics.drawable.statelistdrawable.inflate(statelistdrawable.java:173) e/androidruntime(16123): @ android.graphics.drawable.drawable.createfromxmlinner(drawable.java:881) e/androidruntime(16123): @ android.graphics.drawable.drawable.createfromxml(drawable.java:818) e/androidruntime(16123): @ android.content.res.resources.loaddrawable(resources.java:1954) e/androidruntime(16123): @ android.content.res.typedarray.getdrawable(typedarray.java:601) e/androidruntime(16123): @ android.view.view.(view.java:3347) e/androidruntime(16123): @ android.widget.textview.(textview.java:494) e/androidruntime(16123): @ android.widget.button.(button.java:107) e/androidruntime(16123): @ android.widget.button.(button.java:103) e/androidruntime(16123): ... 28 more

what can solution?

the message pretty self explanatory... you're running out of memory.

check parameters you're passing method, there might many bitmaps being decoded , stored in memory.

consider caching instead of pre-loading bitmaps - load bitmap when need use it. add hasmap (from id actual bitmap). before decoding bitmap check if in map, if don't need decode again. sure check size of map before decoding new bitmaps, , clear cache when necessary don't run out of memory.

edit: here's example how it

edit2: here's full class code. hope didn't make typos.

public class currencyratelistadapter extends baseadapter {     // variable used debug log (logcat)     private static final string tag = "cc:currencyratelistadapter";      private layoutinflater minflater;     private string[] mname;      private integer[] mbitmapids;     private hashmap<integer, bitmap> mbitmaps;     private context mcontext;      private cursor   mratedata;     private double   mrate[];     private string   mdisplayrate[];      private int      mbasecurrencyposition;      public currencyratelistadapter(context context, integer[] name, integer[] bitmapid, cursor rate_data) {         minflater = layoutinflater.from(context);         mbitmaps = new hashmap<integer, bitmap>();         mbitmapids = bitmapid;         mcontext = context;         mname = new string[name.length];          for(int j=0; j<name.length; j++) {             mname[j] = context.getstring(name[j]);         }          mratedata = rate_data;          // update currency rate         updatecurrencyrate();          // set default currency         mbasecurrencyposition = 0;     }      @override     public void finalize() {         log.d(tag, "close sql cursor...");         mratedata.close();     }      public int getcount() {         return mbitmapids.length;     }      public object getitem(int position) {         return position;     }      public long getitemid(int position) {         return position;     }      public view getview(int position, view convertview, viewgroup parent) {         viewholder  holder;                       //log.d(tag, ">>>>> getview: position=" + integer.tostring(position));          try {             if(convertview == null) {                 // uses currencyratelist.xml display each currency selection                 convertview = minflater.inflate(r.layout.currencyratelist, null);                 // create holder view faster access                 holder = new viewholder();                  holder.icon = (imageview) convertview.findviewbyid(r.id.ratelist_icon);                 holder.name = (textview) convertview.findviewbyid(r.id.ratelist_text);                 holder.rate = (textview) convertview.findviewbyid(r.id.ratelist_ratetext);                  // store holder in list                 convertview.settag(holder);             } else {                 // load holder of view                 holder = (viewholder) convertview.gettag();             }              holder.icon.setimagebitmap(geticon(mbitmapids[position]));             holder.name.settext(mname[position]);             holder.rate.settext(mdisplayrate[position]);          } catch (exception e) {             log.e(tag, "getview:" + e.tostring());         }          //log.d(tag, "<<<<< getview: position=" + integer.tostring(position));          return convertview;     }      public void setbasecurrencyindex(int value) {         mbasecurrencyposition = value;          // update display rate         double  rate_base = 1.0;          if(mbasecurrencyposition < mrate.length) {             rate_base = mrate[mbasecurrencyposition];         }          mdisplayrate = new string[mratedata.getcount()];          for(int i=0; i<mratedata.getcount(); i++) {             mdisplayrate[i] = string.format(locale.us, "%.3f", mrate[i] / rate_base);         }     }      public string getdisplaystring(int position) {         string result = "1.000";          if(position < mrate.length) {             result = mdisplayrate[position];         }          return result;     }      public void updatecurrencyrate() {         log.d(tag, ">>>>> updatecurrencyrate");          // update currency rate data         mratedata.requery();          mrate = new double[mratedata.getcount()];          int cnt = mratedata.getcount();         int colcnt = mratedata.getcolumncount();          for(int i=0; i<cnt; i++) {             if(mratedata.movetoposition(i) == true) {                 if(colcnt == 1) {                     // currency rate data in query result set                     mrate[i] = mratedata.getdouble(0);                 } else {                     // data in query result set                     // rate data in 2nd column (refer currencyconverterdb class                     mrate[i] = mratedata.getdouble(1);                 }             } else {                 mrate[i] = 1.0;             }         }          // deactive currency rate data         mratedata.deactivate();          log.d(tag, "<<<<< updatecurrencyrate");     }         public double getcurrencyrate(int position) {         double rate_sel = 1.0;          if(position < mrate.length) {             rate_sel = mrate[position];         }          return rate_sel;     }      /* class viewholder */     private class viewholder {         imageview   icon;         textview    name;         textview    rate;     }      private bitmap geticon(integer bitmapid) {         bitmap icon = mbitmaps.get(bitmapid);          if (icon == null) {             icon = bitmapfactory.decoderesource(mcontext.getresources(), bitmapid);             mbitmaps.put(bitmapid, icon);         }          return icon;     }    } 

Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -