Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不能从静态堆栈中多次弹出()_Java_Android_Stack - Fatal编程技术网

Java 不能从静态堆栈中多次弹出()

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

我需要在我的一个android应用程序中使用静态堆栈。 下面是我如何使用它的:

在常量文件中:

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部分。请阅读代码中推送的部分,并告诉我它在哪里。我看不见。我只能看到你的假设,有什么东西正在被推动。显然,这一假设是错误的:问题是,为什么?这只能通过检查你珍贵的密码来回答。