-1

我想用保存在本地主机上的图像填充 ImageView。我可以在浏览器中很好地显示它,但它不会显示在我的 ImageView 中。

显示图像的 PHP 脚本:

<?php
include('connect_db.php');

    $id = $_GET['id'];

    $path = 'Profile_Images/'.$id.'.jpg';

        echo '<img src='.$path.' border=0>';

?>

这是我从 URL 下载图像的 android 代码:

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 将是一个变量。

编辑

任何拒绝投票的理由将不胜感激!

4

2 回答 2

3

实际上,这很简单。http://192.168.1.13/get_profile_image.php?id=145当您向字符串发送请求时( <img src=Profile_Images/'.$id.'.jpg border=0>) 会被发回。因为 DownloadImage 类不解析 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

于 2013-04-15T12:55:47.780 回答
2

您的 PHP 代码将打印出以下内容:

<img src=Profile_Images/145.jpg border=0>

这不仅是格式错误的 HTML,而且还是文本输出。您的另一个 URLhttp://192.168.1.13/Profile_Images/145.jpg指向一个图像文件,您从中接收到的数据是图像,而不是 HTML 字符串。

您应该考虑让 PHP 返回带有图像 ID 的 URL 的 JSON 响应,然后DownloadImage在该 URL 上运行。与原始回显相比,它的优点是您可以轻松扩展解决方案以返回其他类型的文件,甚至返回文件数组。

于 2013-04-15T12:56:09.013 回答