-2

i have an error in android to display recycler view in fragment.this error come from setAdapater recyclerView. the error is

04-06 14:24:14.875 24405-24405/com.v1.milzam.cuti E/AndroidRuntime: FATAL EXCEPTION: main
                                                                Process: com.v1.milzam.cuti, PID: 24405
                                                                java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
                                                                    at com.v1.milzam.cuti.Fragment.Fragment_Cuti_List$1.onResponse(Fragment_Cuti_List.java:97)
                                                                    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
                                                                    at android.os.Handler.handleCallback(Handler.java:815)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                    at android.os.Looper.loop(Looper.java:210)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5833)
                                                                    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:1113)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)

This is my Fragment class :

public class Fragment_Cuti_List extends Fragment implements View.OnClickListener {
private RecyclerView recyclerView;
private SharedPreferences pref;
private LinearLayout linearLayout;
private ArrayList<Leave> data;
private CutiAdapter adapt;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.frame_cuti_list,container,false);
    initView(view);
    return view;
}

@Override
public void onClick(View v) {

}

private void initView(View view){
    linearLayout=(LinearLayout) view.findViewById(R.id.linearCuti);
    pref=view.getContext().getSharedPreferences("context",0);
    RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.recyclerCuti2);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    loadCuti();
}

private void loadCuti(){
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    // set your desired log level
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    // add your other interceptors …
    // add logging as last interceptor
    httpClient.addInterceptor(logging);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(httpClient.build())
            .build();
    RequestInterface requestInterface=retrofit.create(RequestInterface.class);
    Leave cuti=new Leave();
    String id=pref.getString(Constants.EMP_ID,"");
    cuti.setId(id);
    ServerRequest request=new ServerRequest();
    request.setOperation(Constants.SELECT);
    request.setCuti(cuti);
    Call<ServerResponse> response = requestInterface.operation(request);
    response.enqueue(new Callback<ServerResponse>() {
        @Override
        public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
            ServerResponse resp = response.body();
            Snackbar.make(linearLayout,resp.getMessage(),Snackbar.LENGTH_LONG).show();
            if(resp.getResult().equals(Constants.SUCCESS)){
                data = new ArrayList<>(Arrays.asList(resp.getCuti()));
                adapt=new CutiAdapter(getActivity(),data);
                recyclerView.setAdapter(adapt);
            }


        }

        @Override
        public void onFailure(Call<ServerResponse> call, Throwable t) {
            Log.d("Error",t.getMessage());
        }
    });
}}

this the adapter :

public class CutiAdapter extends RecyclerView.Adapter<CutiAdapter.ViewHolder> {
private ArrayList<Leave> cuti;
private Context context;

public CutiAdapter(Context context, ArrayList<Leave> cuti) {
    this.cuti = cuti;
}

@Override
public CutiAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_cuti, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(CutiAdapter.ViewHolder viewHolder, int i) {
    viewHolder.tipecuti.setText(cuti.get(i).getLeave_type());
    viewHolder.tanggal.setText(cuti.get(i).getDate_from());
}

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

public class ViewHolder extends RecyclerView.ViewHolder {
    private TextView tipecuti,tanggal;

    public ViewHolder(View view) {
        super(view);
        tipecuti=(TextView) itemView.findViewById(R.id.tvTipeCuti);
        tanggal=(TextView) itemView.findViewById(R.id.tvTanggalCuti);

    }
}}

for the json request from server is successful.

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115

1 Answers1

2

replace this line

RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.recyclerCuti2);

to

recyclerView = (RecyclerView)view.findViewById(R.id.recyclerCuti2);

Issue is you have declare a global RecyclerView object but never initialize it as you have created a new local RecycerView object

Kunu
  • 5,078
  • 6
  • 33
  • 61