以下是我的java代码块 我无法走出阻止,同样的代码在其他模块中运行完美。请帮助我
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());
}
};
答案 0 :(得分:4)
首先,使用:
while("START".equals(result))
为了比较字符串。
主要错误是您永远不会更新result
。
首先你设置:
String result=MainActivity.result;
因此result
和MainActivity.result
指向同一个对象。
但是,在您更新的另一个帖子中:
MainActivity.result=resp;
导致MainActivity.result
指向resp
,但result
仍然指向之前的值。
如果要检查循环中的变量,必须确保循环内的值已更改。
答案 1 :(得分:1)
当您要比较2个字符串时,最好使用String.equals()
,==
运算符可以更好地处理基元,但不能处理对象。
答案 2 :(得分:0)
除了使用String#equals()
之外,还要确保变量标记为volatile
,以便线程可以看到其他线程所做的更改。
答案 3 :(得分:0)
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");
}
}
但我仍然无法弄清楚为什么我的原始代码不起作用