ERROR SHOWING DATA MySQL (ONLINE) IN LISTVIEW

0

I'm carrying out an application to show some wines, and I have an error that after researching many sites I can not understand. The fact is that it does show me the data, but with a "click" of delay. That is, the first time I click, it does not show me anything, then I click on another site and it shows me the first query; I give in another site and it shows me the 2nd consultation ... And so on. It shows me the data late, I do not know if it's because it takes too long to connect with the BD or what, and the truth is that I'm feeling a bit overwhelmed :( If someone could help me I would appreciate it very much !!

Here is the ObjectVino class         'public class ObjetoVino {     private String proc_concrete;     private String proc_general;     private String family;     private String name;     private String price_copa;     private String price_bottles;     private String nota_cata;

public ObjetoVino(String proc_concreta, String proc_general, String tipo, String nombre, String precio_copa, String precio_botella, String nota_cata) {
    this.proc_concreta = proc_concreta;
    this.proc_general = proc_general;
    this.familia = tipo;
    this.nombre = nombre;
    this.precio_copa = precio_copa;
    this.precio_botella = precio_botella;
    this.nota_cata = nota_cata;
}

public String getProc_concreta() {
    return proc_concreta;
}

public String getProc_general() {
    return proc_general;
}

public String getTipo() {
    return familia;
}

public String getNombre() {
    return nombre;
}

public String getPrecio_copa() {
    return precio_copa;
}

public String getPrecio_botella() {
    return precio_botella;
}

public String getNota_cata() {
    return nota_cata;
}

public void setProc_concreta(String proc_concreta) {
    this.proc_concreta = proc_concreta;
}

public void setProc_general(String proc_general) {
    this.proc_general = proc_general;
}

public void setFamilia(String familia) {
    this.familia = familia;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public void setPrecio_copa(String precio_copa) {
    this.precio_copa = precio_copa;
}

public void setPrecio_botella(String precio_botella) {
    this.precio_botella = precio_botella;
}

public void setNota_cata(String nota_cata) {
    this.nota_cata = nota_cata;
}

} '

Here the ListView adapter:

public class AdapterVino extends BaseAdapter {

protected Context context;
protected List<ObjetoVino> items;

public AdapterVino(final Context context,final List<ObjetoVino> items) {
    this.context = context;
    this.items = items;
}

public void clear(){
    items.clear();
}

public void addAll(List<ObjetoVino> vinos){
    items.clear();
    for(int i=0 ; i < vinos.size() ; i++)
        items.add(vinos.get(i));
}

@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int i) {
    return items.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

public List<ObjetoVino> getItems() {
    return items;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

    if(convertView == null){
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        convertView = inflater.inflate(R.layout.item_category,parent,false);

        viewHolder = new ViewHolder();

        viewHolder.procedencia = (TextView)convertView.findViewById(R.id.tvMostrarProcedencia);
        viewHolder.familia = (TextView) convertView.findViewById(R.id.tvFamilia);
        viewHolder.nombre = (TextView) convertView.findViewById(R.id.tvMostrarNombre);
        viewHolder.precio_botella = (TextView)convertView.findViewById(R.id.tvPrecioBotella);
        viewHolder.precio_copa = (TextView)convertView.findViewById(R.id.tvPrecioCopa);
        viewHolder.nota_cata = (TextView)convertView.findViewById(R.id.tvMostrarNotaCata);

        convertView.setTag(viewHolder);
    }
    else{
        viewHolder = (ViewHolder) convertView.getTag();
    }

    ObjetoVino obj = items.get(position);

    if(items != null){
        viewHolder.nota_cata.setText(obj.getNota_cata());
        viewHolder.precio_copa.setText(obj.getPrecio_copa());
        viewHolder.precio_botella.setText(obj.getPrecio_botella());
        viewHolder.nombre.setText(obj.getNombre());
        viewHolder.familia.setText(obj.getTipo());
        viewHolder.procedencia.setText(obj.getProc_concreta()+"("+obj.getProc_general()+")");
    }

    return convertView;

}

static class ViewHolder{
    TextView procedencia;
    TextView nombre;
    TextView familia;
    TextView precio_botella;
    TextView precio_copa;
    TextView nota_cata;
}

}

And here the activity from where I call it (the idea is to click on a zone, then the family of the wine and those that fulfill both properties are already shown):

public class MapaEspanaActivity extends AppCompatActivity implements View.OnClickListener {

Button bAndalucia;
Button bMurcia;
Button bExtremadura;
Button bCastillaMancha;
Button bValencia;
Button bMadrid;
Button bCastillaLeon;
Button bAragon;
Button bCataluna;
Button bRioja;
Button bNavarra;
Button bPaisVasco;
Button bCantabria;
Button bAsturias;
Button bGalicia;


public ListView listaVinos;

//Lista que contendrá los vinos a mostrar
List<ObjetoVino> lista = new ArrayList<ObjetoVino>();
///////////////////////
AdapterVino adapter;

Button bTintos;
Button bRosados;
Button bGenerosos;
Button bEspumosos;
Button bBlancos;

//Variables para conectar con la base de datos

//IP de mi URL
String IP = "https://araiswine.000webhostapp.com" ;
//Ruta de las diferentes funciones en esta Activity
String GET_BY_ID = IP + "/obtener_vino_por_id.php" ;

ObtenerWebServiceGET hiloconexion;


String cadenallamada="";


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

    //Enlace con elementos visuales de XML

    bAndalucia = (Button)findViewById(R.id.botonAndalucia);
    bMurcia = (Button)findViewById(R.id.botonMurcia);
    bExtremadura = (Button)findViewById(R.id.botonExtremadura);
    bCastillaMancha = (Button)findViewById(R.id.botonCastillaMancha);
    bValencia = (Button)findViewById(R.id.botonValencia);
    bMadrid = (Button)findViewById(R.id.botonMadrid);
    bCastillaLeon = (Button)findViewById(R.id.botonLeon);
    bAragon = (Button)findViewById(R.id.botonAragon);
    bCataluna = (Button)findViewById(R.id.botonCataluna);
    bRioja = (Button)findViewById(R.id.botonRioja);
    bNavarra = (Button)findViewById(R.id.botonNavarra);
    bPaisVasco = (Button)findViewById(R.id.botonVasco);
    bCantabria = (Button)findViewById(R.id.botonCantabria);
    bAsturias = (Button)findViewById(R.id.botonAsturias);
    bGalicia = (Button)findViewById(R.id.botonGalicia);

    //Relaciono el ListView con el adapter
    listaVinos = (ListView) findViewById(R.id.listaVinos);
    adapter = new AdapterVino(this,lista);
    listaVinos.setAdapter(adapter);



    bBlancos = (Button)findViewById(R.id.botonBlancos);
    bEspumosos = (Button)findViewById(R.id.botonEspumosos);
    bGenerosos = (Button)findViewById(R.id.botonGenerosos);
    bTintos = (Button)findViewById(R.id.botonTintos);
    bRosados = (Button)findViewById(R.id.botonRosados);

    //Listeners de los botones

    bAndalucia.setOnClickListener(this);
    bMurcia.setOnClickListener(this);
    bExtremadura.setOnClickListener(this);
    bCastillaMancha.setOnClickListener(this);
    bValencia.setOnClickListener(this);
    bMadrid.setOnClickListener(this);
    bCastillaLeon.setOnClickListener(this);
    bAragon.setOnClickListener(this);
    bCataluna.setOnClickListener(this);
    bRioja.setOnClickListener(this);
    bNavarra.setOnClickListener(this);
    bPaisVasco.setOnClickListener(this);
    bCantabria.setOnClickListener(this);
    bAsturias.setOnClickListener(this);
    bGalicia.setOnClickListener(this);

    bBlancos.setOnClickListener(this);
    bEspumosos.setOnClickListener(this);
    bGenerosos.setOnClickListener(this);
    bTintos.setOnClickListener(this);
    bRosados.setOnClickListener(this);

}

@Override
public void onClick(View view) {

    switch (view.getId()){          //Si pulso en cada botón
        case R.id.botonAndalucia:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=ANDALUCIA";

            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);

            break;
        case R.id.botonMurcia:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=MURCIA";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonExtremadura:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=EXTREMADURA";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonCastillaMancha:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=CASTILLA-LA%20MANCHA";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonValencia:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=VALENCIA";

            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonMadrid:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=MADRID";

            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonLeon:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=CASTILLA%20Y%20LEON";

            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonAragon:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=ARAGON";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonCataluna:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=CATALUÑA";

            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonRioja:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=LA%20RIOJA";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonNavarra:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=NAVARRA";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonVasco:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=PAIS%20VASCO";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonCantabria:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=CANTABRIA";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonAsturias:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=ASTURIAS";


            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

        case R.id.botonGalicia:
            hiloconexion = new ObtenerWebServiceGET();
            cadenallamada = GET_BY_ID+"?PROCEDENCIA_GENERAL=GALICIA";

            //Muestro los botones y oculto la lista
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.VISIBLE);
            bEspumosos.setVisibility(View.VISIBLE);
            bGenerosos.setVisibility(View.VISIBLE);
            bTintos.setVisibility(View.VISIBLE);
            bRosados.setVisibility(View.VISIBLE);
            break;

            //BOTONES FAMILIAS
        case R.id.botonBlancos:

            cadenallamada+="&FAMILIA=BLANCO";
            adapter.clear();

            hiloconexion.execute(cadenallamada,"1");



            //Oculto los botones y muestro la lista
            listaVinos.setVisibility(View.VISIBLE);


            bBlancos.setVisibility(View.INVISIBLE);
            bEspumosos.setVisibility(View.INVISIBLE);
            bGenerosos.setVisibility(View.INVISIBLE);
            bTintos.setVisibility(View.INVISIBLE);
            bRosados.setVisibility(View.INVISIBLE);

            //Relacion con el Adapter
            reloadAllData();

            break;

        case R.id.botonRosados:

            cadenallamada+="&FAMILIA=ROSADO";
            adapter.clear();

            hiloconexion.execute(cadenallamada,"1");





            //Oculto los botones y muestro la lista
            listaVinos.setVisibility(View.VISIBLE);



            bBlancos.setVisibility(View.INVISIBLE);
            bEspumosos.setVisibility(View.INVISIBLE);
            bGenerosos.setVisibility(View.INVISIBLE);
            bTintos.setVisibility(View.INVISIBLE);
            bRosados.setVisibility(View.INVISIBLE);

            //Relacion con el Adapter
            reloadAllData();

            break;

        case R.id.botonTintos:

            cadenallamada+="&FAMILIA=TINTO";
            adapter.clear();

            hiloconexion.execute(cadenallamada,"1");




            //Oculto los botones y muestro la lista
            listaVinos.setVisibility(View.VISIBLE);

            bBlancos.setVisibility(View.INVISIBLE);
            bEspumosos.setVisibility(View.INVISIBLE);
            bGenerosos.setVisibility(View.INVISIBLE);
            bTintos.setVisibility(View.INVISIBLE);
            bRosados.setVisibility(View.INVISIBLE);

            //Relacion con el Adapter
            reloadAllData();

            break;

        case R.id.botonGenerosos:

            cadenallamada+="&FAMILIA=GENEROSO";
            adapter.clear();

            hiloconexion.execute(cadenallamada,"1");




            //Oculto los botones y muestro la lista
            listaVinos.setVisibility(View.VISIBLE);

            bBlancos.setVisibility(View.INVISIBLE);
            bEspumosos.setVisibility(View.INVISIBLE);
            bGenerosos.setVisibility(View.INVISIBLE);
            bTintos.setVisibility(View.INVISIBLE);
            bRosados.setVisibility(View.INVISIBLE);

            break;

        case R.id.botonEspumosos:

            cadenallamada+="&FAMILIA=ESPUMOSO";
            adapter.clear();

            hiloconexion.execute(cadenallamada,"1");


            //Relacion con el Adapter
            reloadAllData();


            //Oculto los botones y muestro la lista
            listaVinos.setVisibility(View.VISIBLE);


            bBlancos.setVisibility(View.INVISIBLE);
            bEspumosos.setVisibility(View.INVISIBLE);
            bGenerosos.setVisibility(View.INVISIBLE);
            bTintos.setVisibility(View.INVISIBLE);
            bRosados.setVisibility(View.INVISIBLE);

            //Relacion con el Adapter
            reloadAllData();

            break;

        default:                            //Si no pulso ningún botón
            listaVinos.setVisibility(View.INVISIBLE);

            bBlancos.setVisibility(View.INVISIBLE);
            bEspumosos.setVisibility(View.INVISIBLE);
            bGenerosos.setVisibility(View.INVISIBLE);
            bTintos.setVisibility(View.INVISIBLE);
            bRosados.setVisibility(View.INVISIBLE);

            break;

    }
}

public class ObtenerWebServiceGET extends AsyncTask<String,Void,ArrayList<ObjetoVino>>{

    @Override
    protected ArrayList<ObjetoVino> doInBackground(String... strings) {

        String cadena = strings[0];
        URL url = null; //URL de donde queremos obtener informacion
        ArrayList<ObjetoVino> listaAux = new ArrayList<ObjetoVino>();


        if(strings[1]=="1"){        //Obtener por Porcedencia General y Familia

            try {

                url = new URL(cadena);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //Abrir la conexión
                connection.setRequestProperty("User-Agent", "Mozilla/5.0" +
                        " (Linux; Android 1.5; es-ES) Ejemplo HTTP");
                //connection.setHeader("content-type", "application/json");

                int respuesta = connection.getResponseCode();
                StringBuilder result = new StringBuilder();



                if (respuesta == HttpURLConnection.HTTP_OK){


                    InputStream in = new BufferedInputStream(connection.getInputStream());  // preparo la cadena de entrada

                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));  // la introduzco en un BufferedReader

                    // El siguiente proceso lo hago porque el JSONOBject necesita un String y tengo
                    // que tranformar el BufferedReader a String. Esto lo hago a traves de un
                    // StringBuilder.

                    String line;
                    while ((line = reader.readLine()) != null) {
                        result.append(line);        // Paso toda la entrada al StringBuilder
                    }

                    //Creamos un objeto JSONObject para poder acceder a los atributos (campos) del objeto.
                    JSONObject respuestaJSON = new JSONObject(result.toString());   //Creo un JSONObject a partir del StringBuilder pasado a cadena
                    //Accedemos al vector de resultados

                    String resultJSON = respuestaJSON.getString("estado");   // estado es el nombre del campo en el JSON

                    if (resultJSON=="1"){      // hay vinos que mostrar

                        JSONArray vinosJSON = respuestaJSON.getJSONArray("vino");
                        lista.clear();
                        listaAux.clear();

                        for(int i=0; i<vinosJSON.length();i++) {

                            ObjetoVino elemento = new ObjetoVino(vinosJSON.getJSONObject(i).getString("PROCEDENCIA_CONCRETA"),
                                    vinosJSON.getJSONObject(i).getString("PROCEDENCIA_GENERAL"),
                                    vinosJSON.getJSONObject(i).getString("FAMILIA"),
                                    vinosJSON.getJSONObject(i).getString("NOMBRE"),
                                    vinosJSON.getJSONObject(i).getString("PRECIO_COPA"),
                                    vinosJSON.getJSONObject(i).getString("PRECIO_BOTELLA"),
                                    vinosJSON.getJSONObject(i).getString("NOTA_CATA"));

                            listaAux.add(elemento);
                        }


                    }


                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return listaAux;

        }
        return null;
    }

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

    @Override
    protected void onPostExecute(ArrayList<ObjetoVino> s) {

       lista = s;
        super.onPostExecute(s);
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onCancelled(ArrayList<ObjetoVino> s) {
        super.onCancelled(s);
    }
}

private void reloadAllData(){
    adapter.getItems().clear();
    adapter.addAll(lista);
    adapter.notifyDataSetChanged();
}

}

    
asked by pableqe98 01.08.2018 в 14:06
source

1 answer

0

I have found a solution that consists of putting the code of after executing the .execute ("call-string", 1) in the onPostExecute (). In this way I make sure that it does not continue in the main thread without having resolved the query to the database.

    
answered by 02.08.2018 в 13:03