0

arraylist에 약간의 문제가있어서 IndexOutOfBoundsException 예외를 피하기 위해 해결 방법이 필요합니다. 여기IndexOutOfBoundsException sharedpreferences에서 arraylist에 항목을 추가 할 때

내가 항목을 추가 해요 방법은 다음과 같습니다

내 sharedprefs는 다음과 같은 방법으로 저장됩니다
for(Map.Entry<String,?> entry : getAll().entrySet()){ // this is a map with all my sharedprefs 
     list.add((Integer) entry.getValue(), myItem); 
    } 

:

<int name="test0" value="0" /> 
<int name="test1" value="1" /> 
<int name="test2" value="2" /> 

그래서 나는에 따라 내 ArrayList의에 항목을 추가 할 필요가 int 값. 문제는 SharedPrefereces는 임의의 방법으로 값을 저장 매핑하기 때문에, 그래서

list.add((Integer) entry.getValue(), myItem); 

은 그것이 해결책을 가지고 0

사람에서 시작해야하기 때문에 예외가 발생 실행될 때 온다? 감사합니다

+0

여기서'list'를 정의합니다. –

+0

간단한 ArrayList 입니다. 그것은 유인 약을 던지지 않습니다! – iGio90

+0

'ArrayList arr = new ArrayList ();' –

답변

1

이 문제에 대한 "해결 방법"을 사용하여 다음

ArrayList<String> arr = new ArrayList<String>(getAll().entrySet()); 

및 사용할 수 특정 위치에 추가하기 전에 0 또는 다른 값을 입력하십시오.

int mapSize = mPrefMap.size(); 
for(int i = 0; i < mapSize; i++){ 
    listOfStuff.add(0); 
} 

기본적으로 그런 다음 돌아가서 특정 값을 당신이하고있는 방법을 추가 할 수 있습니다 0으로 그 위치에서 모든 위치를 초기화합니다 기본 설정 맵의 크기와 동일한 0의 숫자를 추가 예를 들면 다음과 같습니다.

표준 SharedPreference 클래스를 사용하지 않는 이유는 아직도 혼란 스럽습니다. 이렇게하면이 해결 방법이 필요하지 않으므로 ArrayList의 기본값을 설정해야하는 불필요한 시간을 절약 할 수 있습니다.

1

문제는 아직 ArrayList에 존재하지 않는 index에 액세스 할 수 있으며, Map 때문에 당신은 아마 0 또는 인덱스 2에서에 전에 유효한 요소의 인덱스가 전에 인덱스 1에 삽입하려고하는 정렬되지 않습니다 유효한 색인 01을 갖는

편집 :

대신 빈의 ArrayList를 만드는 당신은 당신의 목록을 미리 채울하는 것입니다 루프

+0

이것은 정확하게 문제가되며 "0"앞에 "1"을 추가하려고합니다. – iGio90

관련 문제