Note that there are some explanatory texts on larger screens.

plurals
  1. POTimerTask causing "Access closed cursor" force close
    primarykey
    data
    text
    <p>I have a TimerTask that is causing my app to crash when I go to a different Intent. Here is the error:</p> <pre><code>06-06 02:45:54.884: E/AndroidRuntime(602): FATAL EXCEPTION: main 06-06 02:45:54.884: E/AndroidRuntime(602): android.database.StaleDataException: Access closed cursor 06-06 02:45:54.884: E/AndroidRuntime(602): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217) 06-06 02:45:54.884: E/AndroidRuntime(602): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 06-06 02:45:54.884: E/AndroidRuntime(602): at com.myapp.ExerciseActivity$TickClass$1.run(ExerciseActivity.java:221) 06-06 02:45:54.884: E/AndroidRuntime(602): at android.os.Handler.handleCallback(Handler.java:587) 06-06 02:45:54.884: E/AndroidRuntime(602): at android.os.Handler.dispatchMessage(Handler.java:92) 06-06 02:45:54.884: E/AndroidRuntime(602): at android.os.Looper.loop(Looper.java:123) 06-06 02:45:54.884: E/AndroidRuntime(602): at android.app.ActivityThread.main(ActivityThread.java:3683) 06-06 02:45:54.884: E/AndroidRuntime(602): at java.lang.reflect.Method.invokeNative(Native Method) 06-06 02:45:54.884: E/AndroidRuntime(602): at java.lang.reflect.Method.invoke(Method.java:507) 06-06 02:45:54.884: E/AndroidRuntime(602): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 06-06 02:45:54.884: E/AndroidRuntime(602): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 06-06 02:45:54.884: E/AndroidRuntime(602): at dalvik.system.NativeStart.main(Native Method) </code></pre> <p>Now here is the code for the TimerTask:</p> <pre><code>public class TickClass extends TimerTask { private int columnIndex; @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { if (cursor != null) { if (_index == 1) { columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_2); _index = 2; } else { columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_1); _index = 1; } String image_1 = cursor.getString(columnIndex); image_1 = image_1.replace(".png", ""); int resourceId = getResources().getIdentifier(getPackageName() + ":drawable/" + image_1, null, null); image_1_view.setImageDrawable(getResources().getDrawable(resourceId)); } } }); } } </code></pre> <p>All it does is animate a PNG.</p> <p>Notice how I have added the <code>if (cursor != null)</code> conditional statement, which didn't fix it. I am not sure how to fix this, is it because it is running on the UI thread, so even though I've navigated away from the Activity, it is still running, but the cursor no longer exists since it is tied in with the Activity?</p> <p>EDIT:</p> <p>I've fixed the force close by cancel()ing the TimerTask onPause(). However, now when I return to the Activity, the image is no longer animated. Any thoughts?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload