Мой код, вызывающий проблему, находится в главном приложении моего приложения. В методе onCreate существует Thread, который запускает метод, называемый uploadImage(). Затем он возвращает карту и устанавливается в uploadedImage (экземпляр карты). После потока, public Карта uploadedImage имеет значение null. (Он выбрасывает NullPointerExeption на указанной строке). Кто-нибудь знает, почему uploadedImage воспринимается как null за пределами 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, но я предполагаю, что у Thread нет возможности назначить uploadedImage перед тем, как вы его получите. –
ПОТОМУ ЧТО вы делаете это как новую тему. Используйте asynctask, затем поместите их в onPostExecute(). или поместите их в свой поток и вызовите начало с помощью runOnUiThread() <- я не пробовал это до –
То, как вы это делаете сейчас, у вас нет гарантий, что 'uploadedImage' будет иметь правильное значение, когда вы нажмете' String url = uploadedImage.toString(); '. Вы это видите? Я не знаю, какие операции вы выполняете в 'uploadImage()', но вы, вероятно, захотите установить обратный вызов, чтобы узнать, когда ваша задача закончена. – vinitius