From 7158b6705d330ac1e61d5aa51c51b54507c4ab88 Mon Sep 17 00:00:00 2001 From: Jay Shrauner Date: Tue, 16 Dec 2014 16:06:03 -0800 Subject: Fix StaleDataExceptions In ensureCacheValid, check whether the cursor is closed before querying its count. In getItem, check whether the cursor is closed before moving it to position, as was already being done in getItemId. Bug:18815354 Change-Id: I4cf2509923695afe9499d0507383c4e0d51bd23e --- .../com/android/common/widget/CompositeCursorAdapter.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/common/java/com/android/common/widget/CompositeCursorAdapter.java b/common/java/com/android/common/widget/CompositeCursorAdapter.java index dddbcf6..8a3fa9b 100644 --- a/common/java/com/android/common/widget/CompositeCursorAdapter.java +++ b/common/java/com/android/common/widget/CompositeCursorAdapter.java @@ -170,7 +170,12 @@ public abstract class CompositeCursorAdapter extends BaseAdapter { mCount = 0; for (Partition partition : mPartitions) { Cursor cursor = partition.cursor; - int count = cursor != null ? cursor.getCount() : 0; + int count; + if (cursor == null || cursor.isClosed()) { + count = 0; + } else { + count = cursor.getCount(); + } if (partition.hasHeader) { if (count != 0 || partition.showIfEmpty) { count++; @@ -428,7 +433,9 @@ public abstract class CompositeCursorAdapter extends BaseAdapter { return null; } Cursor cursor = mPartition.cursor; - cursor.moveToPosition(offset); + if (cursor == null || cursor.isClosed() || !cursor.moveToPosition(offset)) { + return null; + } return cursor; } start = end; -- cgit v1.2.3