Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/04/2015, 04:34
Avatar de Andreslrz
Andreslrz
 
Fecha de Ingreso: septiembre-2008
Mensajes: 99
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Problema raro con List

De la BD
Código Java:
Ver original
  1. public List<Factura> cargarFacturas(String estado) {
  2. List<Factura> facturas = new ArrayList<>();
  3. try {
  4.     Class.forName(properties.getProperty("driver"));
  5.     connection=DriverManager.getConnection(properties.getProperty("url"),
  6. properties.getProperty("usuario"), properties.getProperty("contrasena"));
  7.     connection.setAutoCommit(false);
  8.     PreparedStatement statement = connection.prepareStatement("select * from factura where estado = ?").
  9.     statement.setString(1, estado);
  10.     ResultSet rs = connect.execute(statement);
  11.     while(rs.next()) {
  12.         Factura factura = new Factura(rs.getString("numero"), rs.getString("fecha"), rs.getString("hora"), rs.getString("estado"), rs.getString("cliente"), rs.getString("domicilio"));
  13.         facturas.add(factura);
  14.     }
  15. }catch(SQLExcpetio ex) {
  16.  //excepcion aqui
  17. }
  18. return facturas;
  19. }

Código Java:
Ver original
  1. public List<Factura> buscarFactura(String estado) {
  2.     List<Factura> encontradas = new ArrayList<>();
  3.     //facturas es un arraylist de la clase
  4.     if(facturas.isEmpty())
  5.         facturas = consultas.cargarFacturas(estado);
  6.         encontradas = facturas;
  7.     else {
  8.         for(factura ft: facturas) {
  9.                //Sin el try catch con NullPointerException salta una excepcion por puntero nulo
  10. //Por lo que verifique la lista al cargar datos de la bd
  11.               if(ft.getEstado().equals(estad)) {
  12.                    encontradas.add(ft);
  13.               }
  14.          }
  15.          if(encontradas.isEmpty()) {
  16.             encontradas  = consultas.cargarFacturas(estado);
  17.             facturas.addAll(encontradas);
  18.          }
  19.     }
  20.     return encontradas;
  21. }

Es solo el recorrido del arraylist el que da el problema asi como lo puse aqui salta NullPointerException todas las veces que hace la comparacion en el recorrido de la lista, pero igual saca los datos.

cuando lo encierro en un try catch no entra a la excepcion, solo desaparece el error por arte de magia. En la carga de la bd verifique todas las facturas que se creaban comprarando si era nulo o no y verificando que los datos estubieran, y todo estaba bien.

Tambien ejecute el debugger e hice el seguimiento paso a paso (ya me duelen los dedos de presionar el f7 y f8) y con el debugguer tampoco muestra el error, solo al momento de ejecucion, como dije antes, sin el try catch.

incluso al inicio de la funcion hice lo siguiente para verificar que no hallan datos nulos

Código Java:
Ver original
  1. for(int i = 0; i < facturas.size(); i++) {
  2.     if(facturas.get(i) == null) {
  3.            System.out.println("es nulo en "+i);
  4.            facturas.remove(i);
  5.      }
  6. }

Y no mostro un solo dato nulo.