0

I am doing a project trying from data froma spinner make a database search but it keeps giving me nullPointer Exception even thow my php script is working. I have seen the JSONArray onine and it shows exactly what it's supposed to so I don't really understand where or why in Android is giving me Null Pointer Exception. P.S "data" is date in portuguese and in my database the type is TimeStamp but even taking that part out it doesn't work. Please help me

Php Script

<?php
include "conn.php";

$nome_prova = $_GET["nome"];
$id_prova = "";
$tempos = array();

//$nome_prova = "50 Freestyle";

$athleteQuery = mysqli_query($conn, "SELECT `id` FROM `prova` WHERE `nome` LIKE '$nome_prova'");
$row1 = mysqli_fetch_array($athleteQuery);
$id_prova = $row1['id'];

$selectTimes = mysqli_query($conn, "SELECT A.nome, A.genero, T.tempo,T.data FROM atleta A, tempos T WHERE T.Prova_id = '$id_prova' AND A.id = T.Atleta_id;");*/

while($row = mysqli_fetch_assoc($selectTimes)){
    array_push($tempos, $row);   
}

echo json_encode ($tempos);

?>

Android Script

package com.example.time2swim;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import com.rengwuxian.materialedittext.MaterialEditText;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class VerTempos extends AppCompatActivity {

    Spinner eventspinner;
    Button search;
    ListView listView;
    List<Time> lista;
    List<String> listaevent = new ArrayList<String>();
    String HOST = "http://192.168.1.220/Time2Swim";
    Adapter timeAdapter;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ver_tempos);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        lista = new ArrayList<Time>();

        eventspinner = findViewById(R.id.event);
        listView = findViewById(R.id.listViewTimes);

        listaEvents();

        search = findViewById(R.id.search);
        search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String eventText = String.valueOf(eventspinner.getSelectedItem());
                String url = HOST + "/Mostrar_Tempos.php?nome=" + eventText;
                Ion.with(getBaseContext())
                        .load(url)
                        .asJsonArray()
                        .setCallback(new FutureCallback<JsonArray>() {
                            @Override
                            public void onCompleted(Exception e, JsonArray result) {
                                for (int i = 0; i < result.size(); i++) {
                                    JsonObject obj = result.get(i).getAsJsonObject();
                                    Time t = new Time();

                                    t.setNome_atleta(obj.get("nome").getAsString());
                                    t.setGenero_atleta(obj.get("telefone").getAsString());
                                    t.setData(obj.get("data").getAsString());
                                    t.setTempo(obj.get("tempo").getAsString());

                                    lista.add(t);
                                }

                                listView = findViewById(R.id.listViewAthletes);
                                timeAdapter = new TimeAdapter(VerTempos.this, lista);
                                listView.setAdapter((ListAdapter) timeAdapter);
                            }
                        });
            }
        });
    }

Console

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.time2swim, PID: 15141
    java.lang.NullPointerException: Attempt to invoke virtual method 'int com.google.gson.JsonArray.size()' on a null object reference
        at com.example.time2swim.VerTempos$1$1.onCompleted(VerTempos.java:107)
        at com.example.time2swim.VerTempos$1$1.onCompleted(VerTempos.java:104)
        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:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Goncalo
  • 1
  • 1
  • What is the exact error? The wall of code make it hard to easily figure out where the `NullPointerException` is thrown. – Noah Boegli Mar 14 '21 at 22:48
  • The error was on the line with ".setCallback(new FutureCallback() {" an on " t.setNome_atleta(obj.get("nome").getAsString());" – Goncalo Mar 15 '21 at 07:30

0 Answers0