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();
}
}