diff --git a/okdownload/src/main/java/com/liulishuo/okdownload/core/breakpoint/BreakpointInfo.java b/okdownload/src/main/java/com/liulishuo/okdownload/core/breakpoint/BreakpointInfo.java index 2c7144c1..4e847bf8 100644 --- a/okdownload/src/main/java/com/liulishuo/okdownload/core/breakpoint/BreakpointInfo.java +++ b/okdownload/src/main/java/com/liulishuo/okdownload/core/breakpoint/BreakpointInfo.java @@ -124,12 +124,13 @@ public void setEtag(String etag) { public long getTotalOffset() { long offset = 0; - ArrayList list = (ArrayList) ((ArrayList) blockInfoList).clone(); - - final int count = list.size(); - for (int i = 0; i < count; i++) { - final BlockInfo info = list.get(i); - offset += info.getCurrentOffset(); + final Object[] blocks = blockInfoList.toArray(); + if (blocks != null) { + for (Object block : blocks) { + if (block instanceof BlockInfo) { + offset += ((BlockInfo) block).getCurrentOffset(); + } + } } return offset; } @@ -138,9 +139,13 @@ public long getTotalLength() { if (isChunked()) return getTotalOffset(); long length = 0; - ArrayList list = (ArrayList) ((ArrayList) blockInfoList).clone(); - for (BlockInfo info : list) { - length += info.getContentLength(); + final Object[] blocks = blockInfoList.toArray(); + if (blocks != null) { + for (Object block : blocks) { + if (block instanceof BlockInfo) { + length += ((BlockInfo) block).getContentLength(); + } + } } return length;