2017-04-23 165 views
-2

我有變量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(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 
} 
} 


} 
+1

目前尚不清楚什麼是你瓦納實現...的時候,你使用的變量有值0。如果你在線程結束後使用值,你應該使用回調。 AsyncTask已經將它重新命名爲UI線程......顯然,等待線程在onCreate內部結束是一個可怕的想法...... – Selvin

+0

所以我不能在線程中訪問myInt? – Tom

+0

問題是當你在另一個線程的執行時間wana在當前線程中訪問它...當變量發生變化時,你需要以某種方式通知當前線程從另一個線程... – Selvin

回答

0

您應該重寫run()方法,並將您的代碼放入此方法中。從run()撥打setImage()即可獲得正確的結果。

試試這個:

public void aktualizujRynek(){ 
    final Thread thread1 = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      myInt = 2; 
      setImage(); 
     } 
    }); 

    thread1.start(); 
} 

希望這將工作〜

+0

謝謝Ferdous Ahamed!但是當我在void setImage()中使用它時,myInt仍然是0。 – Tom

+0

因爲您在調用run()方法之前調用了setImage(),因此您將myInt更改爲2.您必須從run()調用setImage()才能獲得正確的結果。查看我更新的答案 – FAT

+0

Great Ferdous Ahamed!它正在工作! – Tom

-1

我想用voidsetImage(),當2個條件將得到滿足設定我的形象,如果(myInt1 == 2 & & myInt2 == 3)。但是,當我在虛空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

@FerdousAhamed你知道該怎麼做嗎? – Tom

相關問題