Java 不能从静态堆栈中多次弹出()
我需要在我的一个android应用程序中使用静态堆栈。 下面是我如何使用它的: 在常量文件中:Java 不能从静态堆栈中多次弹出(),java,android,stack,Java,Android,Stack,我需要在我的一个android应用程序中使用静态堆栈。 下面是我如何使用它的: 在常量文件中: public static Stack<String> st = new Stack<String>(); 现在,当我按下后退按钮时,一旦它工作(我的意思是pop()函数工作),第二次它(pop()函数)就不工作了。 以下是上述逻辑的日志: : Stack is not empty. : PEEK: UI_FirstActivity : Stack is empty. : S
public static Stack<String> st = new Stack<String>();
现在,当我按下后退按钮时,一旦它工作(我的意思是pop()函数工作),第二次它(pop()函数)就不工作了。
以下是上述逻辑的日志:
: Stack is not empty.
: PEEK: UI_FirstActivity
: Stack is empty.
: Stack is not empty.
: PEEK: UI_SecondActivity
: PEEK after POP: UI_FirstActivity
: Stack is not empty.
: PEEK: UI_FirstActivity
: PEEK after POP: UI_FirstActivity
PS:另一件事是,当所有这些UI。。函数包含在同一活动上显示的不同动态创建的表单。现在,当我们输入/显示任何方法/表单的名称时,即UI。。被推到堆栈中
PPS:我同意否决票,但一个简单的解释会很有帮助
购买力平价:似乎,EJB假设我假设:-)。
我将再次尝试解释到底发生了什么:
我有一个活动,在这个活动中,我选择展示各种形式,但每次只展示一种。
每一种方法都必须首先。。。表示一种形式。现在发生的情况是,有时会跳过其中一个表单的显示,因为它不包含任何视图,例如UI_Second。。。所以在你第一次。。。显示第三种形式。现在,当用户按下后退按钮时,理想的情况是程序将跳过UI_秒。。(因为它不包含任何视图)并首先打开UI_。。。为了实现这个功能,我使用了一个堆栈,每当显示一个表单时,即当UI_第一次。。。方法的名称被推入堆栈中。当按下后退按钮时,它会弹出。如果我不够清楚,我道歉
PPPPS:我10分钟前就有问题了。这正是普拉蒂克在回答中所说的,所以我将接受他的回答。我想这很好。这是我所理解的,在第一次背压时
[UI_FirstActivity] alone and it pops making the stack empty.
[UI_SecondActivity,UI_FirstActivity] so it pops UI_SecondActivity alone you have 1 item in stack still.
但是你第二次
[UI_FirstActivity] alone and it pops making the stack empty.
[UI_SecondActivity,UI_FirstActivity] so it pops UI_SecondActivity alone you have 1 item in stack still.
如果我误解了你的问题,请纠正我。是否有其他线程同时将字符串推到堆栈上。最初,您只弹出一个字符串“UI_FirstActivity”。大约在同一时间,一些线程正在推动新的字符串。因此,当您执行第二次弹出时,另一个线程必须再次推送相同的字符串ya,但在第二次反压后,它应该会弹出UI_FirstActivity,而它不会。我正在编辑问题以澄清这一点。谢谢。我在推之前添加了一个检查(如果值已经存在于堆栈中)。它解决了这个问题。你似乎从来都不推任何东西,所以你居然能弹出任何东西,这是令人惊讶的。显然,当你第二次去弹出时,堆栈上什么都没有。您的代码不完整,无法进一步评论。@EJP我已经更新了推送部分。您发布的代码中没有“推送”。@EJP请阅读问题。特别是PS部分。请阅读代码中推送的部分,并告诉我它在哪里。我看不见。我只能看到你的假设,有什么东西正在被推动。显然,这一假设是错误的:问题是,为什么?这只能通过检查你珍贵的密码来回答。