2013-06-01 2 views
0

Я просто хочу получить первые несколько элементов из списка. Но когда я делаю это, есть нулевой указатель в строкеNullpointerExeption при получении элемента из ArrayList

returnList.add(returnList1.get(i)) 

Я тестировал returnList1. Он имеет значения.

ArrayList<someObject> returnList1 = new ArrayList<someObject>(); 
ArrayList<someObject> returnList = new ArrayList<someObject>(); 
returnList1=bunruiSummaryService.getFromDB(param); 
int j = 10; 
if(returnList1.size() < j){ 
    j = returnList1.size(); 
} 
for(int i = 0; i<j; i++){ 
    returnList.add(returnList1.get(i)); 
} 
+0

'returnList1' может быть пустым. Вы уверены, что ваша служба возвращает непустой список? –

+0

Вы не показали нам, где вы инициализировали 'returnList'. И инициализация returnList1 не имеет никакого смысла, поскольку вы назначаете значение return функцией. Вы должны добавить значения в список, а не изменять ссылку –

+2

2 случая: 1. Вы забыли инициализировать 'returnList'. 2. 'bunruiSummaryService.getFromDB (param)' возвращает 'null'. (BTW, если вы собираетесь переписать 'returnList1' сразу, почему бы просто не сделать:' ArrayList returnList1 = bunruiSummaryService.getFromDB (param); '? – Leri

ответ

0

Есть слишком много проблем с этой небольшой кусок кода. Позвольте мне показать вам, как я хотел бы это увидеть:

//somewhere else defined 
private static final int MAX_SIZE_OF_SOME_LIST = 10; //instead of j=10, you simply have to know what the number 10 represents! 

List<SomeObject> resultList = new ArrayList<someObject>(); 
List<SomeObject> returnList = bunruiSummaryService.getFromDB(param); //at this point, make sure to return an empty list instead of null 
int maxSize = MAX_SIZE_OF_SOME_LIST; 
if(returnList.size() < MAX_SIZE_OF_SOME_LIST){ 
    maxSize = returnList.size(); //if you ensured the returned list is not null, if the returned list is empty, you get 0 here 
} 
//even so 
int maxSize = returnList.size() < MAX_SIZE_OF_SOME_LIST ? returnList.size() : MAX_SIZE_OF_SOME_LIST; 

for(int i = 0; i<maxSize; i++){ 
    resultList.add(returnList.get(i)); 
} 

//or you could use subList: 
resultList.addAll(returnList.subList(0, maxSize)); 
+0

Могу ли я попросить спутника, какова была его проблема с этим? –

0

Прежде всего, в вашем коде есть много сквозных отверстий.

Далее в NPE,

Либо returnList1=bunruiSummaryService.getFromDB(param); возвращение null

возможность вы не intialised returnList

returnList.add(returnList1.get(i)) 
+0

Нет он имеет значение –

0

Try поставить нулевую проверку перед использованием и обрабатывать соответствующим образом:

ArrayList<someObject> returnList1 = new ArrayList<someObject>(); 
    returnList1=bunruiSummaryService.getFromDB(param); 
    if(returnList1 == null) 
    { 
     System.out.println("ERROR: List is null"); 
     //handle as per your need 
    } 

Вам также может потребоваться проверить, как вы инициализировали свой returnList. Я думаю, там есть какая-то проблема.

+1

Я бы не возвращал нуль в первую очередь. Я бы предпочел вернуть пустой список из службы. –

+0

Я инициализирую returnList как globle varaible и, конечно, returnList1 имеет значение –

+0

@LongVu Где вы инициализировали ваш returnList? Можете ли вы поделиться этим кодом? Я думаю, что есть какая-то проблема. –

0

Вы создаете ArrayList для returnList1, затем вы перезаписываете его данными из базы данных, но вы не создаете ArrayList для returnList. Вы должны заменить:

ArrayList<someObject> returnList1 = new ArrayList<someObject>(); 

с

ArrayList<someObject> returnList = new ArrayList<someObject>(); 
+0

Я создал returnList как переменную globle уже –

+0

И у вас нет исключений в строке if (returnList1.size() user2302436

+0

Я проверил returnList1 не null. –

Смежные вопросы