Quantcast
Channel: Usuario G. Corporales - Stack Overflow en español
Viewing all articles
Browse latest Browse all 22

Mal funcionamiento en aplicación de Android

$
0
0

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)introducir la descripción de la imagen aquí

Y aquí se muestra la segunda pulsación.introducir la descripción de la imagen aquí

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?


Viewing all articles
Browse latest Browse all 22

Latest Images

Trending Articles





Latest Images