2010-11-24 7 views
0

Je développe un projet BlackBerry sous JDE 4.6.1. Le problème est que lors de l'ajout d'un élément à la liste, une NullPointerException est lancée à partir de la méthode measureListRowBlackBerry ObjectListField

NPE callstack:

CustomerListField(ObjectListField).measureListRow(ListField, int, int) 
CustomerListField(ListField).layout(int, int) 
CustomerListField(ObjectListField).layout(int, int) 
VList(Manager).layoutChild(Field, int, int)

Notes:

  • db_.getDataAccess() - Base de données
  • getListCount - obtenir le nombre d'éléments dans la liste
  • CustomerListItem - la structure d'un élément de liste

Et le code correspondant:

public class CustomerListField extends ObjectListField implements ListFieldCallback, ChangeListener { 

    private PagedDataFetcher dataFetcher = new CustomerListPagedDataFetcher(); 

    … 

    public CustomerListField() { 
     try { 
      super.set(new Object[db_.getDataAccess().getListCount()]); 
     } catch (Throwable e) { 
     } 
    } 

    public void drawListRow(ListField listField, Graphics g, int index, int y, 
          int width) { 
     CustomerListItem currentRow = (CustomerListItem) get(listField, index); 
     … 
    } 

    public Object get(ListField list, int index) { 
     try { 
      return dataFetcher.getRowAtIndex(index); 
     } catch (Throwable e) { 
      return null; 
     } 
    } 

// To obtain the data 
public class CustomerListPagedDataFetcher extends PagedDataFetcher { 
    protected Vector get(int from, int to) throws Exception { 
     return DataAccess.getDataAccess().getLists(from, to); 
    } 
} 


/** 
* layout for list 
*/ 
final class VList extends VerticalFieldManager { 
    private final ObjectListField list; 
    int maxHeight = Display.getHeight() - getFont().getHeight() * 2 - 5; 

    VList(ObjectListField list) { 
     super(Manager.VERTICAL_SCROLLBAR | Manager.VERTICAL_SCROLL); 
     this.list = list; 
    } 

    public int getPreferredHeight() { 
     return 45 * list.getSize(); 
    } 

    protected void sublayout(int width, int height) { 
     super.sublayout(width, height); 
     setExtent(width, maxHeight); 
    } 
} 

Répondre

0

Si vous obtenez un NullPointerException dans measureRowList, le premier endroit où je regarde est la source de cette méthode pour voir quelle valeur NULL est déréférencé. Il semble que vous n'ayez pas inclus la source de cette méthode.

+0

Cette méthode est native de la plate-forme principale. Et ne voit pas sa mise en œuvre. –