From 87ab6962e44914fdee767c5be6b316228d2b7889 Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Wed, 20 Jun 2012 11:34:05 +0800 Subject: [PATCH] Fix crash when SimpleCursorAdapter changes cursor from null when the spinner's drop-down view is shown. Bug: 6637141 Change-Id: I62f759f778b040db386cc72a753c3b2745517b7e --- core/java/android/widget/SimpleCursorAdapter.java | 31 +++++++++-------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/core/java/android/widget/SimpleCursorAdapter.java b/core/java/android/widget/SimpleCursorAdapter.java index f74a31452583..3dd0a9546909 100644 --- a/core/java/android/widget/SimpleCursorAdapter.java +++ b/core/java/android/widget/SimpleCursorAdapter.java @@ -78,7 +78,7 @@ public class SimpleCursorAdapter extends ResourceCursorAdapter { super(context, layout, c); mTo = to; mOriginalFrom = from; - findColumns(from); + findColumns(c, from); } /** @@ -104,7 +104,7 @@ public class SimpleCursorAdapter extends ResourceCursorAdapter { super(context, layout, c, flags); mTo = to; mOriginalFrom = from; - findColumns(from); + findColumns(c, from); } /** @@ -316,20 +316,21 @@ public class SimpleCursorAdapter extends ResourceCursorAdapter { } /** - * Create a map from an array of strings to an array of column-id integers in mCursor. - * If mCursor is null, the array will be discarded. - * + * Create a map from an array of strings to an array of column-id integers in cursor c. + * If c is null, the array will be discarded. + * + * @param c the cursor to find the columns from * @param from the Strings naming the columns of interest */ - private void findColumns(String[] from) { - if (mCursor != null) { + private void findColumns(Cursor c, String[] from) { + if (c != null) { int i; int count = from.length; if (mFrom == null || mFrom.length != count) { mFrom = new int[count]; } for (i = 0; i < count; i++) { - mFrom[i] = mCursor.getColumnIndexOrThrow(from[i]); + mFrom[i] = c.getColumnIndexOrThrow(from[i]); } } else { mFrom = null; @@ -341,13 +342,8 @@ public class SimpleCursorAdapter extends ResourceCursorAdapter { // super.swapCursor() will notify observers before we have // a valid mapping, make sure we have a mapping before this // happens - if (mFrom == null) { - findColumns(mOriginalFrom); - } - Cursor res = super.swapCursor(c); - // rescan columns in case cursor layout is different - findColumns(mOriginalFrom); - return res; + findColumns(c, mOriginalFrom); + return super.swapCursor(c); } /** @@ -367,11 +363,8 @@ public class SimpleCursorAdapter extends ResourceCursorAdapter { // super.changeCursor() will notify observers before we have // a valid mapping, make sure we have a mapping before this // happens - if (mFrom == null) { - findColumns(mOriginalFrom); - } + findColumns(c, mOriginalFrom); super.changeCursor(c); - findColumns(mOriginalFrom); } /** -- 2.11.0