Java 为什么会有NullPointerException?
导致问题的代码位于我的应用程序的MainActivity中。在onCreate方法中,有一个线程运行一个名为uploadImage()的方法。然后返回一个映射,并在UploadeImage(映射实例)中设置。在线程之后,public映射上传图像为空。(它在声明为空的行上抛出一个Java 为什么会有NullPointerException?,java,android,android-activity,android-studio,nullpointerexception,Java,Android,Android Activity,Android Studio,Nullpointerexception,导致问题的代码位于我的应用程序的MainActivity中。在onCreate方法中,有一个线程运行一个名为uploadImage()的方法。然后返回一个映射,并在UploadeImage(映射实例)中设置。在线程之后,public映射上传图像为空。(它在声明为空的行上抛出一个NullPointerException)。有人知道为什么UploadeImage在线程外被视为null吗?谢谢 ... public Map uploadedImage; @Override protected voi
NullPointerException
)。有人知道为什么UploadeImage在线程外被视为null吗?谢谢
...
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);
}
}
...
然后,
uploadeImage
为null
。此外,您应该同步进行该调用,因为此调用
String url = uploadedImage.toString();
明确要求uploadedImage
被初始化,而不是null
if(isNetworkAvailable()) {
try {
//try to upload image
uploadedImage = uploadImage();
TextView txtURL = (TextView) findViewById(R.id.textView);
String url = (uploadedImage != null) ?
uploadedImage.toString() : "null";
txtURL.setText(url);
} catch (IOException e) {
e.printStackTrace();
}
}
然后,
uploadeImage
为null
。此外,您应该同步进行该调用,因为此调用
String url = uploadedImage.toString();
明确要求uploadedImage
被初始化,而不是null
if(isNetworkAvailable()) {
try {
//try to upload image
uploadedImage = uploadImage();
TextView txtURL = (TextView) findViewById(R.id.textView);
String url = (uploadedImage != null) ?
uploadedImage.toString() : "null";
txtURL.setText(url);
} catch (IOException e) {
e.printStackTrace();
}
}
然后,
uploadeImage
为null
。此外,您应该同步进行该调用,因为此调用
String url = uploadedImage.toString();
明确要求uploadedImage
被初始化,而不是null
if(isNetworkAvailable()) {
try {
//try to upload image
uploadedImage = uploadImage();
TextView txtURL = (TextView) findViewById(R.id.textView);
String url = (uploadedImage != null) ?
uploadedImage.toString() : "null";
txtURL.setText(url);
} catch (IOException e) {
e.printStackTrace();
}
}
然后,
uploadeImage
为null
。此外,您应该同步进行该调用,因为此调用
String url = uploadedImage.toString();
明确要求uploadedImage
被初始化,而不是null
if(isNetworkAvailable()) {
try {
//try to upload image
uploadedImage = uploadImage();
TextView txtURL = (TextView) findViewById(R.id.textView);
String url = (uploadedImage != null) ?
uploadedImage.toString() : "null";
txtURL.setText(url);
} catch (IOException e) {
e.printStackTrace();
}
}
方法uploadImage()的代码在哪里?检查里面发生了什么以及为什么它会返回null?方法uploadImage()的代码在哪里?检查里面发生了什么以及为什么它会返回null?方法uploadImage()的代码在哪里?检查里面发生了什么以及为什么它会返回null?方法uploadImage()的代码在哪里?检查里面发生了什么以及为什么它会返回null?我使用了一个ASyncTask,并将映射放在onPostExecute覆盖方法的字符串“url”中。
上述表示任务未完成执行的人是正确的。谢谢大家的帮助。我使用了一个ASyncTask,并将映射放置在onPostExecute覆盖方法的字符串“url”中。
上述表示任务未完成执行的人是正确的。谢谢大家的帮助。我使用了一个ASyncTask,并将映射放置在onPostExecute覆盖方法的字符串“url”中。
上述表示任务未完成执行的人是正确的。谢谢大家的帮助。我使用了一个ASyncTask,并将映射放置在onPostExecute覆盖方法的字符串“url”中。
上述表示任务未完成执行的人是正确的。谢谢大家的帮助。我不是线程化Java的专家,但我猜在您访问UploadeImage之前,该线程没有机会分配UploadeImage。因为您将其设置为新线程。使用asynctask,然后将它们放入onPostExecute()。或者将它们放在线程中,并使用runOnUiThread()调用start。按照现在的方式,当您点击
String url=uploadedImage.toString()时,您无法保证uploadedImage
将使用正确的值代码>。你看到了吗?我不知道您在uploadImage()
中执行什么操作,但是你可能想设置一个回调来知道你的任务何时完成。教育我:如果你的代码在线程完成执行之前无法继续,那么在这里使用线程有什么意义呢?这可能与你的问题无关,但是使用piccaso jar上传图像。不要重新发明轮子,如果它是为了学习曲线,那么就不是线程化Java的专家,但我的猜测是,在访问UploadeImage之前,该线程没有机会分配UploadeImage,因为它是作为一个新线程创建的。使用asynctask,然后将它们放入onPostExecute()。或者将它们放在线程中,并使用runOnUiThread()调用start。按照现在的方式,当您点击String url=uploadedImage.toString()时,您无法保证uploadedImage
将使用正确的值代码>。你看到了吗?我不知道您在uploadImage()
中执行什么操作,但是你可能想设置一个回调来知道你的任务何时完成。教育我:如果你的代码在线程完成执行之前无法继续,那么在这里使用线程有什么意义呢?这可能与你的问题无关,但是使用piccaso jar上传图像。不要重新发明轮子,如果它是为了学习曲线,那么就不是线程化Java的专家,但我的猜测是,在访问UploadeImage之前,该线程没有机会分配UploadeImage,因为它是作为一个新线程创建的。使用asynctask,然后将它们放入onPostExecute()。或者将它们放在线程中,并使用runOnUiThread()调用start。按照现在的方式,当您点击String url=uploadedImage.toString()时,您无法保证uploadedImage
将使用正确的值代码>。你看到了吗?我不知道您在uploadImage()
中执行什么操作,但是你可能想设置一个回调来知道你的任务何时完成。教育我:如果你的代码在线程完成执行之前无法继续,那么在这里使用线程有什么意义呢?这可能与你的问题无关,但是使用piccaso jar上传图像。不要重新发明轮子,如果它是为了学习曲线,那么就不是线程化Java的专家,但我的猜测是,在访问UploadeImage之前,该线程没有机会分配UploadeImage,因为它是作为一个新线程创建的。使用asynctask,然后将它们放入onPostExecute()。或者将它们放在线程中,并使用runOnUiThread()调用start。按照现在的方式,当您点击String url=uploadedImage.toString()时,您无法保证uploadedImage
将使用正确的值代码>。你看到了吗?我不知道您在uploadImage()
中执行什么类型的操作,但您可能想设置一个回调来知道任务何时完成