我的代碼導致問題是在我的應用程序的MainActivity。在onCreate方法中有一個運行名爲uploadImage()的方法的Thread。這然後返回一個地圖,並在uploadedImage(一個地圖實例)中設置。在線程後,public Map uploadedImage爲空。 (它會在聲明的行上拋出一個NullPointerExeption)。有沒有人知道爲什麼uploadedImage在Thread之外被認爲是空的?謝謝!爲什麼會出現NullPointerException?
...
public Map uploadedImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//only perform if there is a network connection
if(isNetworkAvailable()) {
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
//try to upload image
uploadedImage = uploadImage();
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
TextView txtURL = (TextView) findViewById(R.id.textView);
String url = uploadedImage.toString(); //NULLPOINTEREXEPTION HERE
txtURL.setText(url);
}
}
...
不是線程化Java的專家,但我的猜測是線程在訪問它之前沒有機會分配uploadedImage。 – 2015-03-19 03:44:21
因爲你把它作爲一個新的線程。使用asynctask然後把它們放在onPostExecute()。或者把它們放到你的線程中,然後用runOnUiThread()調用開頭< - 我還沒有試過這個 – 2015-03-19 03:45:31
你現在這樣做的方式,你沒有保證'uploadedImage'將會在你點擊' String url = uploadedImage.toString();'。你看到了嗎?我不知道你在'uploadImage()'中做了什麼樣的操作,但是你可能想設置一個回調來知道你的任務完成的時間。 – vinitius 2015-03-19 03:48:31