Java 在while循环中仍然没有出现异常

Java 在while循环中仍然没有出现异常,java,android,while-loop,Java,Android,While Loop,下面是我的java代码块 我不能走出while块,同样的代码在其他模块中运行是完美的。请帮帮我 public void current_ER(View v){ try{ String[] parameters= {uid}; Caller c=new Caller(); c.url="current_ER.php"; c.parameters=par

下面是我的java代码块 我不能走出while块,同样的代码在其他模块中运行是完美的。请帮帮我

public void current_ER(View v){
        try{ 
                String[] parameters= {uid};
                Caller c=new Caller();

                c.url="current_ER.php";
                c.parameters=parameters;
                c.join(); c.start();

                String result=MainActivity.result;
                System.out.print("before while");
                while(result=="START") {
                    try {
                          Thread.sleep(10); 
                          System.out.print(result); 
                    }
                    catch(Exception ex) { 
                          ex.getLocalizedMessage();
                    System.out.print("in catch"); 
                    }
                }
                System.out.print("after while");    
                Toast.makeText(this, "ER Details->"+result , Toast.LENGTH_LONG).show();
                {                   
                    System.out.print("before start indent block");
                    /////////to next screen////
                    Intent Manage_Expense=new Intent(this,Manage_Expense.class);
                    Manage_Expense.putExtra("er_details", result);
                    //MainActivity.result="START";
                    Toast.makeText(this, "ER Details->"+result , Toast.LENGTH_LONG).show();
                    //startActivity(Manage_Expense);
                }

}catch(Exception e){
                System.out.println(e.getMessage());

}

    };
首先,使用:

while("START".equals(result))
为了比较字符串

主要错误是您从未更新结果

首先设置:

String result=MainActivity.result;
因此,result和MainActivity.result指向同一个对象。 但是,在您更新的另一个线程中:

MainActivity.result=resp;
导致MainActivity.result指向resp,但结果仍指向上一个值

如果要检查循环中的变量,必须确保该值在循环中更改。

首先,使用:

while("START".equals(result))
为了比较字符串

主要错误是您从未更新结果

首先设置:

String result=MainActivity.result;
因此,result和MainActivity.result指向同一个对象。 但是,在您更新的另一个线程中:

MainActivity.result=resp;
导致MainActivity.result指向resp,但结果仍指向上一个值


如果要检查循环中的变量,必须确保循环中的值已更改。

在比较两个字符串时,最好使用String.equals,==运算符更好地处理基本体,而不是对象。

在比较两个字符串时,最好使用String.equals,==运算符更好地用于基本体而不是对象。

以及使用Stringequals确保变量标记为volatile,以便线程可以看到其他线程所做的更改。

以及使用Stringequals确保变量标记为volatile,以便线程可以看到其他线程所做的更改

i updated my code as follows and it worked 

 System.out.print("before while");
               while("START".equals(MainActivity.result)) {
                    try {
                        Thread.sleep(10); 
                        System.out.print(MainActivity.result); 
                    }catch(Exception ex) { ex.getLocalizedMessage();
                    System.out.print("in catch"); 

                    }
                }
但我仍然无法理解为什么我的原始代码不起作用


但我仍然无法理解为什么我的原始代码不起作用

您也从未更改循环中result的值,另一个线程会改变它吗?我已经替换了我的代码whileSTART.equalsresult,但我仍然无法从while中获得下一行loop@TimB是的,另一个线程更改它你也不会更改循环中result的值,另一个线程会改变它吗?我已经替换了我的代码whileSTART.equalsresult,但我仍然无法从while中获得下一行loop@TimB是的,另一个线程改变它你对我来说太快了,这就是你+1不,这太不起作用了。你在哪里更新结果值?从线程调用它?你也可以添加代码吗?你对我来说太快了,这就是你+1不,这太不起作用了。你在哪里更新结果值?从线程调用它。你也可以添加代码吗?感谢大家提供即时和有价值的指导。谢谢大家提供即时和有价值的指导