Stack Exchange
No muestra recyclerview en mi fragment
Tengo el siguiente codigo para un recycler view pero lo quiero mostrar en un fragment y cada que ejecuto la aplicacion todo corre muy bien hasta que selecciono el fragment del recycler view y me muestra el siguiente error y se cierra la aplicacion.
Anexo imagen del error
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.codeseasy.examples.loginregister, PID: 13748
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
        at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:93)
        at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:69)
        at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:121)
        at com.codeseasy.examples.loginregister.ui.recycler.RecyclerFragment.obtenerUsuarios(RecyclerFragment.java:83)
        at com.codeseasy.examples.loginregister.ui.recycler.RecyclerFragment.onCreateView(RecyclerFragment.java:74)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3104)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1890)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1814)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1751)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:538)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

El error dice que ocurre en el metodo obtener usuarios en la linea de codigo RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
De igual manera anexo codigo mi fragment recycler y mi navigation donde mando a llamar la clase.
Codigo de mi recyclerView
public class recycler_view extends Fragment {

    EditText etBuscador;
    RecyclerView rvLista;
    AdaptadorUsuarios adaptador;
    List<Usuario> listaUsuarios;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        View vista = inflater.inflate(R.layout.fragment_recycler,container,false);

        etBuscador = vista.findViewById(R.id.etBuscador);
        etBuscador.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) { }

            @Override
            public void afterTextChanged(Editable s) {
                filtrar(s.toString());
            }
        });

        rvLista = vista.findViewById(R.id.rvLista);
        rvLista.setLayoutManager(new GridLayoutManager(getActivity(), 1));

        listaUsuarios = new ArrayList<>();

        obtenerUsuarios();

        adaptador = new AdaptadorUsuarios(recycler_view.this, listaUsuarios);
        rvLista.setAdapter(adaptador);

        return vista;
    }

    public void obtenerUsuarios() {
        assert getApplicationContext() != null;
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 

        StringRequest stringRequest = new StringRequest(Request.Method.POST, getResources().getString(R.string.URL_USUARIOS),
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("RESPONSE_WEB", response);
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            JSONArray jsonArray = jsonObject.getJSONArray("Usuarios");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                                listaUsuarios.add(
                                        new Usuario(
                                                jsonObject1.getString("idUsuario"),
                                                jsonObject1.getString("nombre"),
                                                jsonObject1.getString("telefono"),
                                                jsonObject1.getString("email"),
                                                jsonObject1.getString("usuario"),
                                                jsonObject1.getString("contrasena")

                                        )
                                );
                            }

                            adaptador = new AdaptadorUsuarios(recycler_view.this, listaUsuarios);
                            rvLista.setAdapter(adaptador);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            private VolleyError error;

            @Override
            public void onErrorResponse(VolleyError error) {
                this.error = error;
                error.printStackTrace();
            }
        }
        );

        requestQueue.add(stringRequest);
    }

    private Context getApplicationContext() {
        return null;
    }

    public void filtrar(String texto) {
        ArrayList<Usuario> filtrarLista = new ArrayList<>();

        for(Usuario usuario : listaUsuarios) {
            if(usuario.getNombre().toLowerCase().contains(texto.toLowerCase())) {
                filtrarLista.add(usuario);
            }
        }

        adaptador.filtrar(filtrarLista);
    }
}

Codigo de mi app_bar navigation drawer
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        com.codeseasy.examples.loginregister.databinding.NavigationDrawerBinding binding = NavigationDrawerBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        setSupportActionBar(binding.appBarMain.toolbar);
        binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        DrawerLayout drawer = binding.drawerLayout;
        NavigationView navigationView = binding.navView;
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow, R.id.recyclerFragment)
                .setOpenableLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);

    }

Anexo de igual manera xml de mi recyclerView
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".recycler_view">

    <EditText
        android:id="@+id/etBuscador"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Buscar"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvLista"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etBuscador" />

</androidx.constraintlayout.widget.ConstraintLayout>

Clase adaptador
public class AdaptadorUsuarios extends RecyclerView.Adapter<AdaptadorUsuarios.UsuarioViewHolder> {

    Context context;
    List<Usuario> listaUsuarios;

    public AdaptadorUsuarios(Context context, List<Usuario> listaUsuarios) {
        this.context = context;
        this.listaUsuarios = listaUsuarios;
    }

    public AdaptadorUsuarios(recycler_view recycler_view, List<Usuario> listaUsuarios) {

    }

    public AdaptadorUsuarios(RecyclerFragment recyclerFragment, List<Usuario> listaUsuarios) {

    }

    @NonNull
    @Override
    public UsuarioViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_rv_usuario, viewGroup, false);
        return new UsuarioViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull UsuarioViewHolder usuarioViewHolder, @SuppressLint("RecyclerView") final int i) {
        usuarioViewHolder.tvIdUsuario.setText(listaUsuarios.get(i).getIdUsuario());
        usuarioViewHolder.tvNombre.setText(listaUsuarios.get(i).getNombre());
        usuarioViewHolder.tvTelefono.setText(listaUsuarios.get(i).getTelefono());
        usuarioViewHolder.tvEmail.setText(listaUsuarios.get(i).getEmail());

        usuarioViewHolder.cvTarjeta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, DetallesUsuario.class);
                intent.putExtra("usuario", listaUsuarios.get(i));
                context.startActivity(intent);
            }
        });
    }

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

    public class UsuarioViewHolder extends RecyclerView.ViewHolder {

        CardView cvTarjeta;
        TextView tvIdUsuario, tvNombre, tvTelefono, tvEmail;

        public UsuarioViewHolder(@NonNull View itemView) {
            super(itemView);

            cvTarjeta = itemView.findViewById(R.id.cvTarjeta);
            tvIdUsuario = itemView.findViewById(R.id.tvIdUsuario);
            tvNombre = itemView.findViewById(R.id.tvNombre);
            tvTelefono = itemView.findViewById(R.id.tvTelefono);
            tvEmail = itemView.findViewById(R.id.tvEmail);
        }
    }

    public void filtrar(ArrayList<Usuario> filtroUsuarios) {
        this.listaUsuarios = filtroUsuarios;
        notifyDataSetChanged();
    }
}



Por favor, los mensajes de error van como texto. Pulsa en [edit] para corregir eso y de paso nos dices en qué línea está dando el NPE. La captura hace que el mensaje quede truncado, sin verse la línea exacta donde ocurre, determinante para saber lo que está ocurriendo. Agrega también el XML donde está tu RecyclerView.

Listo ya añadi el xml al igual que el error

Bien. No veo qué sentido tenga esto en tu código: private Context getApplicationContext() {         return null;     } ahí devuelves null como contexto de la aplicación. Desde un Fragment, tienes que tomar el contexto de la Activity a la que éste está ligada. Quita ese método y donde necesites el contexto, obtenlo así: getActivity().getApplicationContext()

Ya lo añadi y continua igual me sigo diciendo que el error esta en el metodo obtener usuarios apesar de haber eliminado la linea que contenia el null y lo muestra con la linea de codigo RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

Ponlo así: RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext()); Si sigue dando error, pulsa en [edit] poniendo cómo tienes el código ahora. Como te dije más arriba, el contexto está en la Activity de la cual depende ese Fragment, no debería darte problemas si la obtienes así.

Ya hice lo que me hiciste y ahora me arrojo error en la clase adaptador que ya añadi a mi pregunta en el metodo donde llamo a llenar el listado este codigo me funciona bien sin el navigation el problema fue al añadirlo en el fragment

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

¿Cuál es el error ahora? No entiendo mucho lo que me dices del navigation ni qué tiene que ver el navigation aquí. Quizá la implementación esté mal desde el principio y deberías pensar en organizar mejor el código siguiendo las directivas de Android ¿?

Mira yo realice el recycler view solo en un activity me funciono despues lo quize implementar dentro de otro proyecto que cuenta con un navigation drawer para poder llamar el recycler desde el menu del navigation pero forzosamente tengo que hacerlo fragment para poder llamarlo y al realizar la migracion me comenzo a arrojar los anteriores errores y ahora me muestra error en la clase adaptador del recycler view en el siguiente metodo @Override public int getItemCount() { return listaUsuarios.size(); } –

Ya, pero cuál es el error que muestra ahora exactamente ¿?

E/AndroidRuntime: FATAL EXCEPTION: main     Process: com.codeseasy.examples.loginregister, PID: 21364     java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference         at com.codeseasy.examples.loginregister.AdaptadorUsuarios.getItemCount(AdaptadorUsuarios.java:64)

¿Verificaste que la lista se está llenando en la parte donde haces la petición Volley? Pon puntos de interrupción en esa parte para verificar que tu lista se llena.
