Android:StartActivityForResult 导致 StackOverFlow 错误
我有一个显示一些图标(以主菜单格式)的 gridView - 根据按下的图标我需要启动一个活动。我正在使用 switch 语句来执行此操作。
它适用于我的两个活动,但是当我尝试启动第三个活动时,我收到 StackOverFlow 错误。
StackTrace:
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): Uncaught handler: thread main exiting due to uncaught exception
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): java.lang.StackOverflowError
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.Activity.startActivityForResult(Activity.java:2749)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.***.NotesMainMenuActivity.startActivity(NotesMainMenuActivity.java:86)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.***.NotesMainMenuActivity$1.onItemClick(NotesMainMenuActivity.java:45)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.os.Handler.handleCallback(Handler.java:587)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.os.Handler.dispatchMessage(Handler.java:92)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.os.Looper.loop(Looper.java:123)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at java.lang.reflect.Method.invokeNative(Native Method)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at java.lang.reflect.Method.invoke(Method.java:521)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at dalvik.system.NativeStart.main(Native Method)
StackTrace 表明有问题的行是:86 和 45。
第 45 行
第 45 行是 OnClickListener 的一部分,我在其中调用一个方法来选择要启动的活动:
private void setClickListenter()
{
grid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
startActivity(position); <--- Line 45
}
});
}
< strong>第 86 行
第 86 行是我在启动新 Activity 后创建意图的地方
Intent i;
switch(position)
{
case ITEM_CLICK_NEWNOTE:
i = new Intent(this, NoteEditActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
break;
case ITEM_CLICK_VIEWNOTES:
i = new Intent(this, NotesListActivity.class);
startActivityForResult(i, VIEW_NOTES);
break;
case ITEM_CLICK_RECYCLED:
Log.w("MainMenuAdapter", "Got into Recycled Switch");
i = new Intent(this, RecycledNotesListActivity.class); <--- Line 86
startActivityForResult(i, RECYCLED_NOTES);
break;
}
switch 语句的前两部分 ITEM_CLICK_NEWNOTE 和ITEM_CLICK_VIEWNOTES 正常工作 - 活动按预期启动。只有 ITEM_CLICK_RECYCLED 会导致错误。 基于将一些日志行放入 RecycledNotesListActivity.java 的代码中,我不相信其中的任何代码都会运行。在那之前它就坏了。
我很困惑,因为 switch 语句的所有三个部分都是相同的,但两个部分有效,一个无效。
我做错了什么?
I have a gridView that displays some icons (in a Main Menu format) - Based on the Icon pressed I need to launch an activity. I am doing this using a switch statement.
It works fine for two of my activities, however when I try to launch a third activity I get a StackOverFlow Error.
StackTrace:
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): Uncaught handler: thread main exiting due to uncaught exception
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): java.lang.StackOverflowError
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.Activity.startActivityForResult(Activity.java:2749)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.***.NotesMainMenuActivity.startActivity(NotesMainMenuActivity.java:86)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.***.NotesMainMenuActivity$1.onItemClick(NotesMainMenuActivity.java:45)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.os.Handler.handleCallback(Handler.java:587)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.os.Handler.dispatchMessage(Handler.java:92)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.os.Looper.loop(Looper.java:123)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at java.lang.reflect.Method.invokeNative(Native Method)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at java.lang.reflect.Method.invoke(Method.java:521)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-11 11:32:44.219: ERROR/AndroidRuntime(18842): at dalvik.system.NativeStart.main(Native Method)
StackTrace indicates that the offending lines are: 86 and 45.
Line 45
Line 45 is part of the OnClickListener where I call a method to choose which activity to start:
private void setClickListenter()
{
grid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
startActivity(position); <--- Line 45
}
});
}
Line 86
Line 86 is where I create an intent after to start the new Activity
Intent i;
switch(position)
{
case ITEM_CLICK_NEWNOTE:
i = new Intent(this, NoteEditActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
break;
case ITEM_CLICK_VIEWNOTES:
i = new Intent(this, NotesListActivity.class);
startActivityForResult(i, VIEW_NOTES);
break;
case ITEM_CLICK_RECYCLED:
Log.w("MainMenuAdapter", "Got into Recycled Switch");
i = new Intent(this, RecycledNotesListActivity.class); <--- Line 86
startActivityForResult(i, RECYCLED_NOTES);
break;
}
The top two parts of the switch statement ITEM_CLICK_NEWNOTE and ITEM_CLICK_VIEWNOTES work correctly - The activity starts as expected. Only ITEM_CLICK_RECYCLED causes an error.
Based on throwing some Log lines into the code into RecycledNotesListActivity.java I don't believe any of the code in that runs. It breaks before then.
I'm confused because all three parts of the switch statement are the same, yet two work and one doesn't.
What have I done wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论