Tengo una aplicación en Android Studio para conexión a una base de datos. La aplicación se basa en seleccionar una fecha en un DatePicker y, si en esa fecha hay pacientes, rellenar una tabla con sus datos. La aplicación funciona, y la tabla se rellena, pero sólo si pulso la fecha 2 veces. Quiero decir, en teoría la tabla se tiene que rellenar en cuanto se pulsa la fecha, pero en la primera pulsación sólo se rellena con una línea y la cabecera de la siguiente, mientras que si pulsas dos veces entonces se rellena bien.
Aquí se muestra la primera pulsación (no se ve muy bien debido al tamaño del dispositivo)
Y aquí se muestra la segunda pulsación.
Mi código para rellenar la aplicación es el siguiente:
@Overridepublic void onDateChanged(DatePicker view, int year, int month, int day){ String username = i.getStringExtra("us_usuario"); String password = i.getStringExtra("us_clave"); int Año = calendario.getYear(); int Mes = calendario.getMonth()+1; int Dia = calendario.getDayOfMonth(); String fecha = Año+"-"+Mes+"-"+Dia; Response.Listener<String> responseListener = new Response.Listener<String>(){ @Override public void onResponse(String response){ try { JSONArray jsonArray = new JSONArray(response); String hora_inicio, hora_fin, fecha, nombre, apellidos, prestacion; for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); hora_inicio = jsonObject.getString("hora_inicio"); hora_fin = jsonObject.getString("hora_fin"); fecha = jsonObject.getString("fecha"); nombre = jsonObject.getString("nombre"); apellidos = jsonObject.getString("apellidos"); prestacion = jsonObject.getString("prestacion"); String[] arrayRespuesta = {hora_inicio, hora_fin, nombre, apellidos, prestacion}; int[] comprobarFecha = separarFecha(fecha); TablaPacientes tabla = new TablaPacientes(Usuario.this, tablePaciente); if(comprobarFecha[0] == calendario.getYear() && comprobarFecha[1] == calendario.getMonth()+1 && comprobarFecha[2] == calendario.getDayOfMonth()){ //tablePaciente.removeAllViews(); tabla.agregarCabecera(R.array.tabla_pacientes); cargarTabla(tabla, arrayRespuesta); }else{ tablePaciente.removeAllViews(); Toast t = Toast.makeText(getApplicationContext(), "No hay pacientes para esta fecha", Toast.LENGTH_LONG); t.show(); } } }catch(JSONException e){ tablePaciente.removeAllViews(); Toast t = Toast.makeText(getApplicationContext(), "No hay pacientes para esta fecha", Toast.LENGTH_LONG); t.show(); }catch(ArrayIndexOutOfBoundsException e){ tablePaciente.removeAllViews(); AlertDialog.Builder builder = new AlertDialog.Builder(Usuario.this); builder.setMessage("Error de excepción en el array "+e.getLocalizedMessage()) .setNegativeButton("Retry", null) .create().show(); } } }; RegisterRequest registerRequest = new RegisterRequest(username, password, fecha, responseListener); RequestQueue queue = Volley.newRequestQueue(Usuario.this); queue.add(registerRequest);}
Aquí mi método cargarTabla:
public void cargarTabla(TablaPacientes tabla, String[] array){ ArrayList<String> elementos = new ArrayList<>(); elementos.add(array[0]);//horario elementos.add(array[2]);//Nombre elementos.add(array[3]);//Apellidos elementos.add(array[4]);//Tipo Servicio tabla.agregarFilaTabla(elementos);}
Y aquí mi método agregarFilaTabla:
public void agregarFilaTabla(ArrayList<String> elementos){ TableRow.LayoutParams layoutCelda; TableRow.LayoutParams layoutFila = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); TableRow fila = new TableRow(actividad); fila.setLayoutParams(layoutFila); for(int i = 0; i< elementos.size(); i++){ TextView texto = new TextView(actividad); texto.setText(String.valueOf(elementos.get(i))); texto.setGravity(Gravity.START); layoutCelda = new TableRow.LayoutParams(obtenerAnchoPixelesTexto(texto.getText().toString()), TableRow.LayoutParams.WRAP_CONTENT); texto.setLayoutParams(layoutCelda); fila.addView(texto); } tabla.addView(fila); filas.add(fila); FILAS++;}
Se que en la línea tablePaciente.removeAllViews(); borra mi tabla, es decir, que si la tengo ahí sólo me mostrará la segunda consulta (en caso de haberla), pero en teoría si quito esa línea el código debería pasar 2 veces por el if de rellenar la tabla, poniendo las 2 consultas (o las que sean). ¿Alguna idea de cómo solucionarlo?