Java 在while循环中仍然没有出现异常
下面是我的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
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不,这太不起作用了。你在哪里更新结果值?从线程调用它。你也可以添加代码吗?感谢大家提供即时和有价值的指导。谢谢大家提供即时和有价值的指导