Android:StartActivityForResult 导致 StackOverFlow 错误

发布于 2024-11-19 17:48:48 字数 3711 浏览 3 评论 0原文

我有一个显示一些图标(以主菜单格式)的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文