Для доступа к элементам списка, который находится внутри другого списка (ArrayList), можно использовать двойную индексацию. Например, если у нас есть ArrayList<ArrayList<Integer>>, чтобы получить элемент вложенного списка по индексам i и j, можно написать следующее:
```java
ArrayList<ArrayList<Integer>> mainList = new ArrayList<>();
ArrayList<Integer> innerList = new ArrayList<>();
innerList.add(1);
innerList.add(2);
innerList.add(3);
mainList.add(innerList);
int element = mainList.get(i).get(j);
```
Для избежания ошибок при обращении к вложенным элементам возвращаемого массива из функции `getAllData`, необходимо убедиться, что возвращаемый массив не пустой и что индексы элементов, к которым вы обращаетесь, находятся в пределах размеров массива. Можно также добавить проверки на null перед обращением к элементам для безопасности:
```java
ArrayList<ArrayList<Integer>> data = getAllData();
if (data != null && i < data.size() && j < data.get(i).size()) {
int element = data.get(i).get(j);
}
```
Таким образом, добавив проверки на наличие данных и правильные индексы, можно избежать ошибок при обращении к вложенным элементам возвращаемого массива.