好的,所以我正在编写一个Android应用程序,我正在尝试下载一个Bitmap并将其设置为ImageView。相关部分的代码如下:
private class GetContactInfo extends AsyncTask<String, Void, ContactInfo[]> {
@Override
protected ContactInfo[] doInBackground(String... url) {
// Instantiate what is needed
URL json = null;
//Set the JSON URL
try {
json = new URL(url[0]);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
// Use Jackson library to read out the data from the contacts page
try {
contacts = mapper.readValue(json, ContactInfo[].class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//Add everything into the bitmap ArrayList
for (int i = 0; i < contacts.length; i++) {
String imageURL = contacts[i].getSmallImageURL();
// Download the Bitmap and add it to the ArrayList
try {
bitmap.add(downloadBitmap(imageURL));
} catch (IOException e) {
e.printStackTrace();
}
}
// Return statement
return contacts;
}
public Bitmap downloadBitmap(String imageURL) throws IOException {
URL url = new URL(imageURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream stream = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(stream);
if (bitmap == null) {
Log.e("Null", "Bitmap null");
}
return bitmap;
}
日志永远不会捕获到位图为空,或者至少它没有显示它(我在堆栈跟踪中看到还有4个错误,但它们从未出现过,我不知道如何扩展它显示其他错误。)
NullPointerException出现在bitmap.add(downloadBitmap(imageURL));
行。所以我的downloadBitmap
函数以某种方式返回null结果。有什么想法吗?
编辑:我不确定这是否重要,但网址中的图片是.jpeg文件。
编辑2:把它放在评论中,所以我也将它编辑到我的帖子中,位图被声明为全局变量,如此ArrayList<Bitmap> bitmap;
这样我以后可以在我的onPostExecute方法中使用它。 / p>
答案 0 :(得分:1)
正如你所说,错误在行
bitmap.add(downloadBitmap(imageURL));
这意味着罪魁祸首是位图变量,而不是downloadBitmap(imageURL)方法。
此外,在您的编辑中,您已经提到已将位图声明为全局变量 - ArrayList位图;
为了访问(向它添加位图注释)这个全局声明的变量,你必须初始化它。
在你的onCreate do -
bitmap = new ArrayList<Bitmap>();
和NPE必须去。
答案 1 :(得分:0)
从Internet下载图像时,应使用异步请求。在downloadBitmap
中,连接正在另一个线程中下载,但主线程立即返回bitmap
,无论下载是否完成。
答案 2 :(得分:0)
您在哪里初始化bitmap
?据我所知,它是null并且您正在使用该null对象,因此出现Null Pointer Exception。这来自您提供的信息。如果在函数内部发生错误,那就不一样了。