0

The code gets the categories data, which i'm trying show when i click on language activity and load the data on the another activity, but seems more problematic which m not able to understand.

This is the issue i got when i called the activity

Process: com.status.funnystatus.wishes, PID: 19112
    java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
        at com.status.funnystatus.wishes.helper.CategoryAdapter.getItemCount(CategoryAdapter.java:159)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3603)
        at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3103)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
        at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)
        at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:786)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
        at android.view.View.measure(View.java:17474)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5786)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5289)
        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:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

This the file where i got the issue

CategoryAdapter.java

package com.status.funnystatus.wishes.helper;

import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;


import com.status.funnystatus.wishes.R;
import com.status.funnystatus.wishes.models.Category;
import com.status.funnystatus.wishes.models.Subcategory;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

import com.status.funnystatus.wishes.api.APIService;
import com.status.funnystatus.wishes.api.APIUrl;

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.ViewHolder> {

    private List<Category> categories;
    private Context mCtx;
    private OnItemClickListener mOnItemClickListener;
    private Retrofit retrofit;
    private APIService service;


    public CategoryAdapter(List<Category> categories, Context mCtx) {
        this.categories = categories;
        this.mCtx = mCtx;

        retrofit = new Retrofit.Builder()
                .baseUrl(APIUrl.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        service = retrofit.create(APIService.class);
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_users, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(CategoryAdapter.ViewHolder holder, final int position) {
        Category category = categories.get(position);
//        holder.textViewName.setText(subcategory.getCat_id());
        holder.textViewName.setText(category.getName());


    }


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

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView textViewName;
        public TextView textViewMessage;
        public TextView textViewCount;

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

            textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            textViewMessage = (TextView) itemView.findViewById(R.id.textViewMessage);
            textViewCount = (TextView) itemView.findViewById(R.id.textViewCount);
            itemView.setOnClickListener(mOnClickListener);
        }

        View.OnClickListener mOnClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mOnItemClickListener.onItemClick(v, getPosition());
            }
        };
    }
}
James Z
  • 12,209
  • 10
  • 24
  • 44
AwesomeMe
  • 11
  • 1
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Phantômaxx Jun 14 '18 at 13:37
  • It actually is. **Every NPE is the same thing**: an object is used without being created first. – Phantômaxx Jun 14 '18 at 15:15
  • **(generic) NPE solution**: find the object which is causing the problem. Solve the problem by instancing it first. – Phantômaxx Jun 15 '18 at 07:15

2 Answers2

0

You need to initalize your categories, in your activity creation it will query the adapter size.

private List<Category> categories = new List<Category>();
CodeChimp
  • 4,745
  • 6
  • 45
  • 61
0

Because the when you call setAdapter(), the list is not initialized, so the getItemCount() result NullPointerException on List<Category>

Try this:

@Override
public int getItemCount() {
    return categories == null ? 0 : categories.size();
}
phatnhse
  • 3,870
  • 2
  • 20
  • 29