所以我在完成一项活动并回到其父(右项?)活动时遇到问题。
它到达此线程ActivityThread.performResumeActivity(IBinder,boolean)行:2241 然后给我一个InvocationTargetException。(Throwable)行:50,出现以下错误
java.lang.RuntimeException:无法恢复活动{com.android.market.companionpushup / com.android.market.companionpushup.WorkoutActivity}:java.lang.IllegalStateException:database /data/data/com.android.market .companionpushup / databases / Exercise数据已经关闭
所以我想我很困惑,当我只是试图完成我的活动并回到原始活动时,如何处理我的数据库时出错(但从未在原始活动中点击onResume方法)。
调用以启动新活动的代码
public void takeRest(int time, int addTime) {
Intent i = new Intent(this, TimerActivity.class);
i.putExtra("time", time);
i.putExtra("addTime", addTime);
startActivity(i);
}
然后我的自定义计时器一直运行,直到我单击此按钮跳过计时器的其余部分。此时它永远不会回到原始活动(我在onCreate,onStart,onResume,onActivityResult上设置了断点),没有错误就达不到任何断点。
Button skip = (Button)findViewById(R.id.skip);
skip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
timer.cancel();
setResult(RESULT_OK);
finish();
}
});
来自原始Activity的其他代码,但是当我单步执行调试器
时从未到达@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Toast.makeText(WorkoutActivity.this, "Yay", Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:1)
也许您必须使用startActivityForResult()
方法开始活动?
答案 1 :(得分:1)
错误告诉您需要知道的内容:
java.lang.RuntimeException: Unable to resume activity {com.android.market.companionpushup/com.android.market.companionpushup.WorkoutActivity}: java.lang.IllegalStateException: database /data/data/com.android.market.companionpushup/databases/Exercise Data already closed
这说明com.android.market.companionpushup.WorkoutActivity
类中使用的数据库连接已经关闭,但某些东西需要(可能会重新填充ListView)。您应该检查onPause
中的onStop
或WorkoutActivity
代码,以确保您没有错误地关闭数据库。您使用的是CursorLoader
还是startManagingCursor
?