从PHP脚本加载的图像不会显示在ImageView中


Image loaded from a PHP script isn't displayed in ImageView

我想用保存在本地主机上的图像填充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(它需要原始图像数据),所以它不知道实际图像在哪里。两种解决方案:

  1. 你的"不良做法"方法
  2. 使用这个PHP脚本来返回原始图像数据:
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相比,它的优点是可以轻松地扩展解决方案以返回其他类型的文件,甚至返回一个文件数组。