0

When I try to run my code, it gives me an error saying that i'm trying to attempt RecyclerView on a null object reference. The problem that android studio detect is in this line recyclerView.setHasFixedSize(true);. Anybody know the problemm ?

Here is the Activity:

public class SalesHistoryActivity extends AppCompatActivity {

    @BindView(R.id.sales_recycler)
    RecyclerView recyclerView;

    SalesAdapter adapter;
    List<Sales> salesList;
    Sales sales;

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


        salesList = new ArrayList<>();
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new SalesAdapter(this, salesList);
        recyclerView.setAdapter(adapter);

        loadItem();

    }

Here is the adapter

public class SalesAdapter extends RecyclerView.Adapter<SalesAdapter.ItemViewHolder> {

    private Context mCtx;
    private List<Sales> salesList;

    public SalesAdapter(Context mCtx, List<Sales> salesList){
        this.mCtx = mCtx;
        this.salesList = salesList;
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View rootView = LayoutInflater.from(mCtx).inflate(R.layout.list_sales, null, false);
         RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        rootView.setLayoutParams(layoutParams);
        return new ItemViewHolder(rootView);
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {

        final Sales sales =salesList.get(position);

        holder.tvDate.setText(sales.getDate());
        holder.tvType.setText(sales.getType());
        holder.tvQty.setText(sales.getQty());
        holder.tvPrice.setText(mCtx.getString(R.string.price, sales.getPrice()));

    }

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

    public class ItemViewHolder extends RecyclerView.ViewHolder {

        TextView tvDate, tvType, tvQty, tvPrice;
        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
}
ישו אוהב אותך
  • 28,609
  • 11
  • 78
  • 96

1 Answers1

0

It simply because you're forgetting to bind the view when using ButterKnife library. So, you need to change your code by adding ButterKnife.bind(this):

public class SalesHistoryActivity extends AppCompatActivity {

    @BindView(R.id.sales_recycler)
    RecyclerView recyclerView;

    ..

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

        ButterKnife.bind(this);

        // now your views are binded. You can access them

        ...

        recyclerView.setHasFixedSize(true);

        ...

    }

}
ישו אוהב אותך
  • 28,609
  • 11
  • 78
  • 96