我想用保存在本地主机上的图像填充ImageView。我可以在浏览器中显示它但它不会显示在我的ImageView中
PHP脚本显示图片:
<?php
include('connect_db.php');
$id = $_GET['id'];
$path = 'Profile_Images/'.$id.'.jpg';
echo '<img src='.$path.' border=0>';
?>
这是我的android代码从URL下载图像:
URL url;
try {
url = new URL("http://192.168.1.13/get_profile_image.php?id=145");
new DownloadImage(this).execute(url);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void imageDownloaded(final Bitmap downloadedImage) {
runOnUiThread(new Runnable() {
public void run() {
ImageView imageView = (ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(downloadedImage);
}
});
}
当我把URL到其他图像它工作良好,但我的从来没有加载,有什么想法吗?
同样,下面的代码工作,但我有一种不好的做法…
URL url;
try {
url = new URL("http://192.168.1.13/Profile_Images/145.jpg");
new DownloadImage(this).execute(url);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
其中145为变量
编辑
任何否决投票的原因都将受到赞赏!
其实很简单。当您向http://192.168.1.13/get_profile_image.php?id=145
发送请求时,将返回一个字符串(<img src=Profile_Images/'.$id.'.jpg border=0>
)。因为downloadadimage类不解析HTML(它需要原始图像数据),所以它不知道实际图像在哪里。两种解决方案:
- 你的"不良做法"方法
- 使用这个PHP脚本来返回原始图像数据:
$id = $_GET['id'];
$path = 'Profile_Images/'.$id.'.jpg';
$type = 'image/jpeg';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($path));
readfile($path);
编辑:忘记归功于某人:以上代码取自此处(与适应的变量名称):https://stackoverflow.com/a/1851856/1087848
您的PHP代码将打印如下内容:
<img src=Profile_Images/145.jpg border=0>
不仅是格式错误的HTML,而且是文本输出。你的其他URL, http://192.168.1.13/Profile_Images/145.jpg
指向一个图像文件,从你收到的数据是一个图像,而不是一个HTML字符串。
您应该考虑让PHP返回带有图像ID URL的JSON响应,然后在该URL上运行DownloadImage
。与原始echo相比,它的优点是可以轻松地扩展解决方案以返回其他类型的文件,甚至返回一个文件数组。