Infinity
Infinity

Reputation: 243

Custom List view crashing after scrolling

I am following this tutorial:

http://www.androidinterview.com/android-custom-listview-with-image-and-text-using-arrayadapter/

I need a simple hardcoded listview with some text and images in it. Everything works perfectly fine but when I scroll down the app crashes.

This is MainActivity class

public class MainActivity extends AppCompatActivity {

    ListView list;
    String[] itemdate ={
            "21/02",
//there are more dates like this in here

    };

    String[] itemname ={
            "Snapchat",
//there are more strings like this in here
    };

    Integer[] imgid={
            R.drawable.pic1,
//there are more pictures like this in here
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CustomListAdapter adapter=new CustomListAdapter(this, itemdate, itemname, imgid);
        list=(ListView)findViewById(R.id.list);
        list.setAdapter(adapter);

        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // TODO Auto-generated method stub
                String Slecteditem = itemname[+position];
                Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

This is my customlistadapter class.

public class CustomListAdapter extends ArrayAdapter<String> {

    private final Activity context;
    private final String[] itemdate;
    private final String[] itemname;
    private final Integer[] imgid;

    public CustomListAdapter(Activity context, String[] itemdate, String[] itemname, Integer[] imgid) {
        super(context, R.layout.mylist, itemname);
        // TODO Auto-generated constructor stub

        this.context=context;
        this.itemdate=itemdate;
        this.itemname=itemname;
        this.imgid=imgid;
    }

    public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.mylist, null,true);

        TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);

        txtTitle.setText(itemdate[position]);
        imageView.setImageResource(imgid[position]);
        extratxt.setText(itemname[position]);
        return rowView;

    };
}

This is the logcat of the crash

 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.Context.getDrawable(Context.java:458)
            at android.widget.ImageView.resolveUri(ImageView.java:811)
            at android.widget.ImageView.setImageResource(ImageView.java:418)
            at com.peeters.ward.app.CustomListAdapter.getView(CustomListAdapter.java:37)
            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.fillGap(ListView.java:666)
            at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5029)
            at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3424)
            at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3352)
            at android.widget.AbsListView.onTouchMove(AbsListView.java:3793)
            at android.widget.AbsListView.onTouchEvent(AbsListView.java:3651)
            at android.view.View.dispatchTouchEvent(View.java:9294)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
            at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2765)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
            at android.view.View.dispatchPointerEvent(View.java:9514)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
            at android.view.ViewRootImpl$InputStage.app
02-26 15:49:03.645    2166-2166/com.peeters.ward.app D/AndroidRuntime﹕ Shutting down VM
02-26 15:49:03.645    2166-2166/com.peeters.ward.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.peeters.ward.app, PID: 2166
    java.lang.OutOfMemoryError: Failed to allocate a 144000012 byte allocation with 1290600 free bytes and 1260KB 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.Context.getDrawable(Context.java:458)
            at android.widget.ImageView.resolveUri(ImageView.java:811)
            at android.widget.ImageView.setImageResource(ImageView.java:418)
            at com.peeters.ward.app.CustomListAdapter.getView(CustomListAdapter.java:37)
            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.fillGap(ListView.java:666)
            at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5029)
            at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3424)
            at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3352)
            at android.widget.AbsListView.onTouchMove(AbsListView.java:3793)
            at android.widget.AbsListView.onTouchEvent(AbsListView.java:3651)
            at android.view.View.dispatchTouchEvent(View.java:9294)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
            at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2765)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
            at android.view.View.dispatchPointerEvent(View.java:9514)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.f
02-26 15:49:05.192    2166-2174/com.peeters.ward.app W/art﹕ Suspending all threads took: 6.159ms
02-26 15:49:05.896    2166-2166/com.peeters.ward.app I/Process﹕ Sending signal. PID: 2166 SIG: 9

Upvotes: 1

Views: 77

Answers (2)

Pratik Tank
Pratik Tank

Reputation: 2252

this is due to outofmemory error use piccaso to load images like this way

Picasso.with(mContext).load(imgid[position]).error(R.drawable.add_photo).into(myImgView);

to get lib http://square.github.io/picasso/

and Try enabling large heap support, by adding this to your AndroidManifest.xml file:

<application android:largeHeap="true"

Upvotes: 1

Niza Siwale
Niza Siwale

Reputation: 2404

Most likely the lengths of the itemdate array ,imgid array and itemname array are not the same. One of them is either smaller than the rest or larger than. Otherwise everything is alright

Upvotes: 0

Related Questions