2015-06-05 56 views
0

我想保存在由接收呼叫觸發服務這個信息,但它的崩潰後,我用.SET的Android List和Array設置

SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss dd-MM-yyyy", Locale.getDefault()); 
Calendar calendar = Calendar.getInstance(); 
String currentDateTimeString = df.format(calendar.getTime()); 

List<String> lastCall = new ArrayList<String>(); 

lastCall.set(0, currentDateTimeString); 
lastCall.add("12:22:12 12-03-2014"); 
lastCall.add("22:06:34 14-07-2013"); 
lastCall.add("12:22:12 12-03-2012"); 
lastCall.add("22:06:34 14-07-2011"); 
lastCall.add("12:22:12 12-03-2010"); 

if (lastCall.size() > 5){ 
    lastCall.remove(6); 
} 

editor.putString("lastCall", new Gson().toJson(lastCall)); 
editor.commit(); 

我想只保存最後5次調用,因爲.set應該添加到第一個位置,直到獲得6個字符串並刪除第6個字符串。

有人可以告訴我我做錯了什麼,我需要改變以使其工作?

謝謝!

+0

閱讀文檔。 'set'拋出'IndexOutOfBoundsException \t if location <0 || location> = size()'。在你的情況下,'size()'在這個點上是0,因爲還沒有item。 – njzk2

+0

Hi @ njzk2你可以用一個例子來回答嗎? – FilipeOS

+0

我真的不明白你在做什麼。你爲什麼要在列表中添加6個元素,只是爲了在刪除第6個元素之後立即刪除? – njzk2

回答

0

嗯,我弄明白了,我將字符串添加到數組中,保存並讀取其他活動,但是在保存到數組之前我沒有讀取數據......所以我一直在重寫整個數組而沒有得到最後的琴絃......

而在這種情況下.add是最好的。

SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss dd-MM-yyyy", Locale.getDefault()); 
Calendar calendar = Calendar.getInstance(); 
String currentDateTimeString = df.format(calendar.getTime());  

List<String> lastCall; 
lastCall = new Gson().fromJson(blockerPreferences.getString("lastCall", null), new TypeToken<List<String>>() {}.getType()); 

lastCall.add(currentDateTimeString); 

if (lastCall.size() == 6){ 
    lastCall.remove(0); 
} 

editor.putString("lastCall", new Gson().toJson(lastCall)); 
editor.commit(); 
0

爲什麼你需要使用set? 據我所知,你想把currentDateTimeString在0的位置? 如果是這樣的 - 使用:

lastCall.add(0, currentDateTimeString); 

設置用於具體指數更換現有記錄。如果你在該位置沒有記錄 - 它會崩潰。

+0

您好,我想將該字符串放在第1條記錄上,但從不替換剩餘的記錄。之後刪除第六個字符串(如果存在)。如果我使用.add它將取代。 – FilipeOS

+0

@FilipeOS,add(index,object)將在該位置插入**一個對象,而不是替換當前佔據它的對象。使用** set **將導致替換該位置處的對象。也許ArrayList不是你收藏的最佳選擇。以Dequeue爲例。 – Seishin