-1

I'm trying do recyclerview and cardview integraqtion in my main activity but i am getting this error. I have also implemented drawyer layout in mainActivity.

Error

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.lucifer.hireus, PID: 12782
                  java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
                      at com.example.lucifer.hireus.orderAdapter.getItemCount(orderAdapter.java:58)
                      at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:2938)
                      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2904)
                      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3283)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702)
                      at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1691)
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1467)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1197)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:433)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702)
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556)
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                      at android.view.View.layout(View.java:16939)
                      at android.view.ViewGroup.layout(ViewGroup.java:5409)
                      at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2464)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2167)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1301)
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7016)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:590)
                      at android.view.Choreographer.doFrame(Choreographer.java:560)
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:145)
                      at android.app.ActivityThread.main(ActivityThread.java:6946)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
I/Process: Sending signal. PID: 12782 SIG: 9
Application terminated.

my files are as follows:

Book.java

package com.example.lucifer.hireus;

public class Book {
    private String Title;
    private int Thumbnail;

    public Book() {
    }

    public Book(String title, int thumbnail) {

        Title = title;
        Thumbnail = thumbnail;

    }
    public String getTitle(){
        return Title;

    }
    public int getThumbnail(){
        return Thumbnail;
    }
    public void setTitle(String title){
        Title=title;

    }
    public void setThumbnail(int thumbnail){
        Thumbnail=thumbnail;
    }
}

orderAdapter.java

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Aws on 28/01/2018.
 */

public class orderAdapter extends RecyclerView.Adapter<orderAdapter.MyViewHolder> {

    private Context mContext ;
    private List<Book> mData ;


    public orderAdapter(Context mContext, List<Book> mData) {
        this.mContext = mContext;
        this.mData = mData;
        return ;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view ;
        LayoutInflater mInflater = LayoutInflater.from(mContext);
        view = mInflater.inflate(R.layout.order_cardview,parent,false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(orderAdapter.MyViewHolder holder, int position) {
        holder.tv_book_title.setText(mData.get(position).getTitle());
        holder.img_book_thumbnail.setImageResource(mData.get(position).getThumbnail());
    }











    @Override
    public int getItemCount() {
        return mData.size();
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tv_book_title;
        ImageView img_book_thumbnail;
        CardView cardView ;

        public MyViewHolder(View itemView) {
            super(itemView);

            tv_book_title = (TextView) itemView.findViewById(R.id.order_title) ;
            img_book_thumbnail = (ImageView) itemView.findViewById(R.id.order_image);
            cardView = (CardView) itemView.findViewById(R.id.orderCardview);


        }
    }


}

mainActivity.java

import android.content.Intent;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mToggle;
    List<Book> orders;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDrawerLayout=(DrawerLayout)findViewById(R.id.drawer);
        mToggle= new ActionBarDrawerToggle(this,mDrawerLayout,R.string.open,R.string.close);
        mDrawerLayout.addDrawerListener(mToggle);
        mToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        NavigationView navigationView= (NavigationView)findViewById(R.id.navigationView);
        navigationView.setNavigationItemSelectedListener(this);

        RecyclerView myrv=(RecyclerView) findViewById(R.id.recylerView);
        orderAdapter myAdapter= new orderAdapter(this,orders);
        orders= new ArrayList<>();
        orders.add(new Book("Lawyers",R.drawable.lawyer));
        orders.add(new Book("Carpentar",R.drawable.carpentar));
        orders.add(new Book("Lawyers",R.drawable.lawyer));
        orders.add(new Book("Carpentar",R.drawable.carpentar));

        myrv.setLayoutManager(new GridLayoutManager(this,3));
        myrv.setAdapter(myAdapter);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(mToggle.onOptionsItemSelected(item)){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id=item.getItemId();
        if(id==R.id.logout){
            Intent intent= new Intent(getApplicationContext(),LoginActivity.class);
            startActivity(intent);
        }


        return false;
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.lucifer.hireus.MainActivity">




   <android.support.design.widget.NavigationView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       app:menu="@menu/nagivationmenu"
       android:layout_gravity="start"
       android:id="@+id/navigationView"
       app:headerLayout="@layout/header"
       ></android.support.design.widget.NavigationView>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView

                android:layout_marginStart="11dp"
                android:layout_marginTop="8dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=" Select the category of Work "
                android:textSize="27dp"
                android:textStyle="bold"

                android:padding="8dp"/>
        </LinearLayout>


    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recylerView"
            android:layout_marginTop="90dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
    </LinearLayout>






</android.support.v4.widget.DrawerLayout>

order_cardview.xml

<?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:clickable="true"
    android:foreground="?android:attr/selectableItemBackground"

    android:layout_width="120dp"
    android:layout_height="190dp"
    xmlns:cardview="http://schemas.android.com/apk/res-auto"
    android:layout_margin="5dp"
    cardview:cardCornerRadius="4dp"
    android:id="@+id/orderCardview"
    >
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
            android:id="@+id/order_image"
            android:scaleType="centerCrop"
            android:background="@drawable/paint"
            android:layout_width="match_parent"

            android:layout_height="160dp" />
        <TextView
            android:id="@+id/order_title"
            android:textColor="@color/Black"
            android:layout_gravity="center"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Painting Service"
            android:textStyle="bold"
            android:textSize="15sp"
            android:layout_marginTop="10dp"
            android:padding="2dp"/>
    </LinearLayout>




    </android.support.v7.widget.CardView>

please help me out if possible, i am looking for answers

Himanshu Sharma
  • 123
  • 2
  • 8

1 Answers1

4
orderAdapter myAdapter= new orderAdapter(this,orders);
orders= new ArrayList<>();

Your problem is here. You are passing in orders to the adapter, but it is null at this point. You are then initializing orders afterwards.

Put myAdapter after you've initialised orders

TomH
  • 2,293
  • 1
  • 12
  • 24