我有一个TimerTask,当我转到另一个Intent时,导致我的应用程序崩溃。这是错误:
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)
现在这里是TimerTask的代码:
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));
}
}
});
}
}
它所做的就是为PNG制作动画。
注意我是如何添加if (cursor != null)
条件语句的,它没有修复它。我不知道如何解决这个问题,是因为它在UI线程上运行,所以即使我已经离开了Activity,它仍在运行,但是光标不再存在,因为它与活动?
编辑:
我通过取消()TimerTask onPause()来修复关闭力。但是,现在当我返回Activity时,图像不再是动画。有什么想法吗?
答案 0 :(得分:0)
这不合适。
如果您使用cursor
作为全局变量,那么您可以在runOnUiThread
中使用,但我的意见是您必须以这种方式使用游标。
//get the record in cursor
if(Cur.getCount()!=0){
if(Cur.moveToFirst()){
do{
//here you can manipulate your record
}while(Cur.moveToNext());
}
}
Cur.close();
这是尝试和运行的完美方式。
答案 1 :(得分:0)
取消onPause()中的TimerTask解决了这个问题。