I am trying to show a list dialog with names from my database, but I keep getting a StaleDataException . I know that usually this means that I try to use data from a closed cursor, but the cursor does not close until I get all the data, so I donβt understand why I get this
d = new Dialog(this); d.setContentView(R.layout.dialog_layout); d.setTitle("Select Bowler"); ListView lv = (ListView)d.findViewById(R.id.dialog_list); Cursor c = getContentResolver().query( BowlersDB.CONTENT_URI, new String[] { BowlersDB.ID, BowlersDB.FIRST_NAME, BowlersDB.LAST_NAME }, null, null, BowlersDB.LAST_NAME + " COLLATE LOCALIZED ASC" ); if (c.moveToFirst() && c != null) { SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, R.layout.names_listview, c, new String[] { BowlersDB.FIRST_NAME, BowlersDB.LAST_NAME }, new int[] { R.id.bListTextView, R.id.bListTextView2 }, 0 ); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { bowlerClickedID = id; updateName(id); } }); d.show(); } c.close();
Mistake
android.database.StaleDataException: Attempting to access a closed CursorWindow. Most probable cause: cursor is deactivated prior to calling this method. at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139) at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) at android.database.CursorWrapper.getString(CursorWrapper.java:114) at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:150) at android.widget.CursorAdapter.getView(CursorAdapter.java:250) at android.widget.AbsListView.obtainView(AbsListView.java:2267) at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) at android.widget.ListView.onMeasure(ListView.java:1156) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) at android.view.View.measure(View.java:15172) ...
EDIT: If I comment on the c.close() , it works fine, but I can't just leave the cursor open, although what should I do?
tyczj
source share