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

时间:2013-04-15 12:37:10

标签: java php android bitmap imageview

我想用我的localhost上保存的图像填充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;
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;
    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将是变量。

修改

赞赏投票的任何理由都会受到赞赏!

2 个答案:

答案 0 :(得分: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脚本来回显原始图像数据:
  3. 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

答案 1 :(得分:2)

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

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

这不仅是格式错误的HTML,而且还是 text 输出。您的其他网址http://192.168.1.13/Profile_Images/145.jpg指向图像文件,您收到的数据是图像,而不是HTML字符串。

您应该考虑让PHP使用图像ID的URL返回JSON响应,然后在该URL上运行DownloadImage。它对原始回声的优势在于,您可以轻松扩展解决方案以返回其他类型的文件,甚至返回一组文件。

相关问题