Olá, estou desenvolvendo um aplicativo onde o administrador registra usuários, e gostaria de mostrar todos os usuários deste administrador em uma
ListView
noAndroid Studio
emJava
, eu fiz já uma parte, porém quando abro a tela que possui aListView
o aplicativo simplesmente para de funcionar, para a conexão aoBanco de Dados
estou utilizando oPHP
, veja o que estou recebendo noLogCat
:
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 emPHP
:
Print do retorno em Json - consulta_usuario.php
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 doJson
está retornando nulo noAndroid
, sendo que no site retorna com os dados que estão noBanco de Dados
. Mesmo assim preciso de ajuda e a pergunta mais acima continua!