Android development tutorial video 48 - dynamic loading of images

+1 Vishesh Nagpal · February 1, 2016
I am trying to dynamically load images just as Bucky loaded text


here are a few tweaks i made -

instead of String[] foods i made an object of Item class

ArrayList<Item> items = new ArrayList<>();
items.add(new Item("bacon","img1"));
items.add(new Item("Ham","img2"));

PS. i have images in drawable by the name img1 a and img2
and then i did this
ListAdapter visheshsAdapter = new CustomAdapterVishesh(this,items);


my custom adapter class looks like this

class CustomAdapterVishesh extends ArrayAdapter <MainActivity.Item>{

//whenever you make array adapter, make construnctor
//instead of int resources, we have string resource
CustomAdapterVishesh(Context context, ArrayList<MainActivity.Item> items) {
super(context,R.layout.custom_row,items)
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater visheshsInflater = LayoutInflater.from(getContext());
View customView = visheshsInflater.inflate(R.layout.custom_row, parent, false);


MainActivity.Item singleFoodItem = getItem(position);

TextView visheshsText = (TextView) customView.findViewById(R.id.visheshsText);
ImageView visheshsImage = (ImageView) customView.findViewById(R.id.imageView);
visheshsText.setText(singleFoodItem.getFood());

String uri = singleFoodItem.getImage();
int res = getContext().getResources().getIdentifier(uri,"drawable",getContext().getPackageName());
Drawable image = getContext().getResources().getDrawable(res);
visheshsImage.setImageDrawable(image);
return customView;
}
}




i am getting following error:



FATAL EXCEPTION: main
                                                                              Process: org.waste2wealth.listexample, PID: 28412
                                                                              java.lang.OutOfMemoryError: Failed to allocate a 37748748 byte allocation with 4194304 free bytes and 25MB until OOM
                                                                                  at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                                                  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                                                                  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
                                                                                  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
                                                                                  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
                                                                                  at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635)
                                                                                  at android.content.res.Resources.loadDrawable(Resources.java:2540)
                                                                                  at android.content.res.Resources.getDrawable(Resources.java:806)
                                                                                  at android.content.res.Resources.getDrawable(Resources.java:771)
                                                                                  at org.waste2wealth.listexample.CustomAdapterVishesh.getView(CustomAdapterVishesh.java:46)
                                                                                  at android.widget.AbsListView.obtainView(AbsListView.java:2346)
                                                                                  at android.widget.ListView.makeAndAddView(ListView.java:1875)
                                                                                  at android.widget.ListView.fillDown(ListView.java:702)
                                                                                  at android.widget.ListView.fillFromTop(ListView.java:763)
                                                                                  at android.widget.ListView.layoutChildren(ListView.java:1684)
                                                                                  at android.widget.AbsListView.onLayout(AbsListView.java:2148)
                                                                                  at android.view.View.layout(View.java:16630)
                                                                                  at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                                  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
                                                                                  at android.view.View.layout(View.java:16630)
                                                                                  at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                                                                  at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                                                                  at android.view.View.layout(View.java:16630)
                                                                                  at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                                  at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435)
                                                                                  at android.view.View.layout(View.java:16630)
                                                                                  at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                                                                  at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                                                                  at android.view.View.layout(View.java:16630)
                                                                                  at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                                  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
                                                                                  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
                                                                                  at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
                                                                                  at android.view.View.layout(View.java:16630)
                                                                                  at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                                                                  at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                                                                  at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
                                                                                  at android.view.View.layout(View.java:16630)
                                                                                  at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                                  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
                                                                                  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
                                                                                  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                                                  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                                                  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                                  at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                                  at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                                                  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                                                  at android.os.Handler.handleCallback(Handler.java:739)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)





this may be because of some memory leak associated with images, can anyone help me with this?

Post a Reply

Replies

Oldest  Newest  Rating
0 Gary Whitney · February 1, 2016
Just a thought.
The screen on a phone is pretty small so you should scale down your images before you incorporate them into your app. No need for large file when a smaller one will have plenty of resolution.
I think Bucky cover this in the meme tutorials 23-30.
  • 1

Java / Android Development

107,315 followers
About

Very popular language used to create desktop applications, website applets, and Android apps.

Links
Moderators
Bucky Roberts Administrator