Java 如何在另一种方法中使用变量?
我对变量int myInt有一个基本问题。在void aktualizujRynek()中,我为myInt赋值2。在void setImage()中,变量的值为0,而不是2。为什么?Java 如何在另一种方法中使用变量?,java,android,Java,Android,我对变量int myInt有一个基本问题。在void aktualizujRynek()中,我为myInt赋值2。在void setImage()中,变量的值为0,而不是2。为什么? public class MainActivity extends AppCompatActivity { int myInt; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc
public class MainActivity extends AppCompatActivity {
int myInt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aktualizujRynek();
setImage();
}
public void aktualizujRynek(){
final Thread thread1 = new Thread(new Runnable() {
myInt = 2;
});
thread1.start();
}
public void setImage(){
if (myInt ==2){
//do something
}
}
}
您应该重写
run()
方法,并将代码放入此方法中。从run()
调用setImage()
,以获得正确的结果
试试这个:
public void aktualizujRynek(){
final Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
myInt = 2;
setImage();
}
});
thread1.start();
}
希望这能起作用~我想使用voidsetImage()设置我的映像,如果(myInt1==2&&myInt2==3)满足两个条件时。但当我在void setImage中使用myInt1和myInt2时,它们的值为0,尽管我指定了值2和3
public class MainActivity extends AppCompatActivity {
int myInt1;
int myInt2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aktualizujRynek();
aktualizujPark();
setImage();
}
public void aktualizujRynek(){
final Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
myInt1 = 2; // in my real code i take this value from HTTP response
}
});
thread1.start();
}
public void aktualizujPark(){
final Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
myInt2 = 3; // in my real code i take this value from HTTP response
}
});
thread2.start();
}
public void setImage(){
if (myInt1 == 2 && myInt2 == 3){
//do something
}
}
}
现在还不清楚你能做到什么。。。使用变量时,它的值为0。如果在线程结束后使用值,则应使用回调。AsyncTask已经有了它,而且它在ui线程上被回调。。。显然,在onCreate中等待线程结束是一个糟糕的想法…所以我不能在线程中访问myInt?问题是在执行另一个线程时,您何时可以在当前线程中访问它。。。当变量发生变化时,您需要以某种方式从另一个线程通知当前线程…感谢Ferdous Ahamed!但是,当我在void setImage()中使用myInt时,它仍然是0。因为在调用run()方法之前会调用setImage(),在该方法中将myInt更改为2。必须从run()调用setImage()才能得到正确的结果。看到我的最新答案很高兴知道。如果我的答案有帮助,请将其标记为已接受答案,并在可能的情况下进行放弃投票。提前谢谢:)@FerdousAhamed你知道怎么做吗?