我的代码导致问题是在我的应用程序的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