从sd卡显示图像(Android 2.3 vs 4.0.4)
我正在使用以下代码下载图像:从sd卡显示图像(Android 2.3 vs 4.0.4),android,image,imageview,android-sdcard,Android,Image,Imageview,Android Sdcard,我正在使用以下代码下载图像: // Download AVATAR try { File avatar = new File(Environment.getExternalStorageDirectory() + "/Android/data/carl.fri.fer.omegan/avatar.jpg"); prefs.edit().putString("lo
// Download AVATAR
try {
File avatar = new File(Environment.getExternalStorageDirectory() + "/Android/data/carl.fri.fer.omegan/avatar.jpg");
prefs.edit().putString("loginUser", json.name).commit();
prefs.edit().putInt("loginMatter", json.darkmatter).commit();
if (!avatar.exists()) {
Log.i("AVATAR", "Downloading user avatar...");
URL url = new URL("Valid URL");
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(avatar);
fos.write(baf.toByteArray());
fos.close();
}
else Log.i("AVATAR", "The user avatar already exists!");
} catch (IOException e) { System.out.println("Error downloading avatar: " + e); }
File usrAvatar = new File(Environment.getExternalStorageDirectory() + "/Android/data/carl.fri.fer.omegan/avatar.jpg");
if(usrAvatar.exists()) {
Bitmap avatarBmp = BitmapFactory.decodeFile(usrAvatar.getAbsolutePath());
userAvatar.setImageBitmap(avatarBmp);
}
然后我尝试使用以下代码显示此图像:
// Download AVATAR
try {
File avatar = new File(Environment.getExternalStorageDirectory() + "/Android/data/carl.fri.fer.omegan/avatar.jpg");
prefs.edit().putString("loginUser", json.name).commit();
prefs.edit().putInt("loginMatter", json.darkmatter).commit();
if (!avatar.exists()) {
Log.i("AVATAR", "Downloading user avatar...");
URL url = new URL("Valid URL");
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(avatar);
fos.write(baf.toByteArray());
fos.close();
}
else Log.i("AVATAR", "The user avatar already exists!");
} catch (IOException e) { System.out.println("Error downloading avatar: " + e); }
File usrAvatar = new File(Environment.getExternalStorageDirectory() + "/Android/data/carl.fri.fer.omegan/avatar.jpg");
if(usrAvatar.exists()) {
Bitmap avatarBmp = BitmapFactory.decodeFile(usrAvatar.getAbsolutePath());
userAvatar.setImageBitmap(avatarBmp);
}
问题出现在这里:
userAvatar.setImageBitmap(avatarBmp);
Android 4.0.4:错误类型:NullPointerException
Android 2.3.5:错误类型:ImageView未显示图像,但未显示任何错误
1.ImageView
userAvatar是正确的,因为我可以显示可绘制文件夹中的图像
2-我要显示的图像已成功下载,因为使用文件管理器,我可以在指定的文件夹和文件名中找到它
3-图像没有损坏,因为我可以使用任何图像查看器打开它
那么,问题出在哪里?太疯狂了
任何帮助都将不胜感激
提前谢谢你 请尝试以下代码:
ImageView bmImage;
FileInputStream instream = new FileInputStream("/sdcard/Pictures/Image.png");
BufferedInputStream bif = new BufferedInputStream(instream);
byteImage1 = new byte[bif.available()];
bif.read(byteImage1);
textView.append("\r\n" + byteImage1+"\r\n");
bmImage.setImageBitmap(BitmapFactory.decodeByteArray(byteImage1, 0, byteImage1.length));
textView.append("\r\n" + byteImage2+"\r\n");
17179是该图像的长度,现在我已经编辑了答案检查。它仍然显示NullPointerException和
textView
trhows[B@4178be30...somewhere你做错了,它对我来说工作得很好…离开textview…ImageView将显示SD卡文件中的图像,就像我提到的那样…bmImage.setImageBitmap(BitmapFactory.decodeByteArray(byteImage1,0,byteImage1.length));这将在屏幕上显示图像所有我用来下载、存储和显示图像的代码都在我的问题中。我不理解它…我返回了de image,一切正常。