[RESOLVIDO] Mostrar dados do Banco de Dados em um ListView - Android Studio

Olá, estou desenvolvendo um aplicativo onde o administrador registra usuários, e gostaria de mostrar todos os usuários deste administrador em uma ListView no Android Studio em Java, eu fiz já uma parte, porém quando abro a tela que possui a ListView o aplicativo simplesmente para de funcionar, para a conexão ao Banco de Dados estou utilizando o PHP, veja o que estou recebendo no LogCat:

Erro do LogCat
2020-06-19 15:17:16.175 15425-15425/com.aplicativo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.aplicativo, PID: 15425
    java.lang.NullPointerException: Attempt to invoke virtual method ‘int com.google.gson.JsonArray.size()’ on a null object reference
    at com.aplicativo.ui.usuarios.Usuarios$3.onCompleted(Usuarios.java:160)
    at com.aplicativo.ui.usuarios.Usuarios$3.onCompleted(Usuarios.java:156)
    at com.koushikdutta.async.future.SimpleFuture.handleCallbackUnlocked(SimpleFuture.java:107)
    at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:141)
    at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:124)
    at com.koushikdutta.ion.IonRequestBuilder$1.run(IonRequestBuilder.java:244)
    at com.koushikdutta.async.AsyncServer$RunnableWrapper.run(AsyncServer.java:60)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6626)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

Abaixo segue os códigos em Java das partes em que seria fazendo a consulta e exibindo os dados em uma ListView:

Usuarios.java
public class Usuarios extends Fragment {

    ListView listViewUsuarios;

    UsuariosAdapter usuariosAdapter;
    List<UsuariosGS> lista;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View root = inflater.inflate(R.layout.fragment_usuarios, container, false);

        listViewUsuarios = (ListView) root.findViewById(R.id.ListaUsuarios);

        List lista = new ArrayList<UsuariosGS>();
        ArrayAdapter<UsuariosGS> UsuariosGS = new ArrayAdapter<UsuariosGS>(getContext(), android.R.layout.simple_list_item_1, lista);
        listViewUsuarios.setAdapter(UsuariosGS);

        listaUsuarios();


    }
    private void listaUsuarios(){
        String url = HOST + "/consulta_usuario.php";

        Ion.with(getContext()).load(url).asJsonArray().setCallback(new FutureCallback<JsonArray>() {
            @Override
            public void onCompleted(Exception e, JsonArray result) {

                for(int i = 0; i < result.size(); i++){
                    JsonObject resultado = result.get(i).getAsJsonObject();

                    UsuariosGS usuarios = new UsuariosGS();

                    usuarios.setNome(resultado.get("Nome").getAsString());
                    usuarios.setEMail(resultado.get("E-Mail").getAsString());

                    lista.add(usuarios);
                }
                usuariosAdapter.notifyDataSetChanged();
            }
        });
    }
}

O mais estranho é que possui dados no Banco de Dados, veja na print o retorno quando faço a consulta através do sistema em PHP:

Print do retorno em Json - consulta_usuario.php

image

Desta forma, no restante foi feito de maneira correra. Alguém sabe como posso resolver isso?


EDIT.:

Fiz uma alteração no código Usuarios.java, dessa forma ele exibe uma mensagem ao invés de parar o aplicativo, veja o código que foi alterado:

Código alterado - Usuarios.java
private void listaUsuarios(){
    String url = HOST + "/consulta_usuario.php";

    Ion.with(getContext()).load(url).asJsonArray().setCallback(new FutureCallback<JsonArray>() {
        @Override
        public void onCompleted(Exception e, JsonArray result) {

            if(result != null){
                for(int i = 0; i < result.size(); i++){
                    JsonObject resultado = result.get(i).getAsJsonObject();

                    UsuariosGS usuarios = new UsuariosGS();

                    usuarios.setNome(resultado.get("Nome").getAsString());
                    usuarios.setEMail(resultado.get("E-Mail").getAsString());

                    lista.add(usuarios);
                }
                usuariosAdapter.notifyDataSetChanged();
            } else {
                Toast.makeText(getActivity(),"Não existem usuários cadastrados!",Toast.LENGTH_LONG).show();
            }
        }
    });
}

Agora ele está entrando no else, ou seja já que o resultado do Json está retornando nulo no Android, sendo que no site retorna com os dados que estão no Banco de Dados. Mesmo assim preciso de ajuda e a pergunta mais acima continua!

Resolvi através deste site: https://www.simplifiedcoding.net/json-parsing-in-android/

Não era bem o que eu queria, mais seve.