use Asynctask to fetch data but my Activity is slow to appear

Asked

Viewed 30 times

0

I have a class RepositorioCidades searching data from cities using AsyncTask and returns a ArrayAdapter to the MainActivity, but when I call the MainActivity is a black screen until the data of the city is loaded.

public class RepositorioCidades {

    public ArrayAdapter<Cidades> buscaCidades(MainActivity context) {

        ArrayAdapter adpCidades = new ArrayAdapter(context, R.layout.simple_spinner_main);

        try {
            return new getCidades(adpCidades).execute().get();
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    private static class getCidades extends AsyncTask<Void, Void, ArrayAdapter<Cidades>> {

        private ArrayAdapter<Cidades> adpCidades;
        private String url = "https://www.repositoriocidades.com.br/retornacidade.php";

        private getCidades(ArrayAdapter<Cidades> adpCidades) {
            this.adpCidades = adpCidades;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected ArrayAdapter<Cidades> doInBackground(Void... params) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
                    // JSONArray contacts = new JSONArray(jsonStr);
                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("cidades");
                    // looping through All Contacts
                    if (contacts != null) {
                        for (int i = 0; i < contacts.length(); i++) {
                            JSONObject c = contacts.getJSONObject(i);
                            Cidades cidades1 = new Cidades();
                            cidades1.setCod_cidade(c.getString("cod_cidade"));
                            cidades1.setNome(c.getString("nome")+", "+c.getString("estado_uf"));
                            adpCidades.add(cidades1);
                        }
                    }
                    return adpCidades;

                } catch (final JSONException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(ArrayAdapter<Cidades> result) {
            super.onPostExecute(result);
        }

    }
}

Here’s the call on Activity:

public class MainActivity extends AppCompatActivity{

RepositorioCidades repositorioCidades;
ArrayAdapter<Cidades> adpCidades;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    if (VerificaInternet.isOnline(this)) {
            verificaLogin();
            repositoriosAcessos.acessosGeral(usuarioGlobal.getEmail_usuario());
            repositorioCidades = new RepositorioCidades();
            adpCidades = repositorioCidades.buscaCidades(this);
            repositorioCidades = null;
        }else{
            noInternet();
        }
   }
}

private void verificaLogin(){

        if (preferences.contains("Habilitado")){
            usuarioGlobal.setNome_usuario(preferences.getString("NomeUsuario",""));
            usuarioGlobal.setEmail_usuario(preferences.getString("EmailUsuario",""));


           } else {
                it = new Intent(this, ActLogin.class);
                startActivityForResult(it, 0);
                MainActivity.this.fileList();
            }
    }
}

Verificainternet:

public class VerificaInternet {

    public static boolean isOnline(Context ctx) {
        ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting()) {
            return true;
        }
        return false;
    }
}
  • Enter the code of VerificaInternet, VerificaLogin...

  • Even without using the Ternet check and the checkLogin still black screen =/

  • Tracked by the console to know where the delay is?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.