我希望我的Android应用程序显示存储在mysql数据库中的图像。
我可以使用PHP加载和显示保存在mysql数据库中的图像,图像在浏览器上正确显示。
我也可以使用网站的网址(例如谷歌图片)在我的Android应用中显示图片。
但是当我尝试在Android应用程序中使用我的PHP的url时,我收到了这个错误:
SkImageDecoder :: Factory返回null。
java代码:
@Override
protected void onPostExecute(Bitmap b) {
super.onPostExecute(b);
loading.dismiss();
imageView.setImageBitmap(b);
}
@Override
protected Bitmap doInBackground(String... params) {
String id = params[0];
String add = "http://192.168.1.30/save/load_image_from_db.php";
URL url;
Bitmap image = null;
try {
url = new URL(add);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream is = null;
BufferedInputStream bis = null;
is = connection.getInputStream();
bis = new BufferedInputStream(is,8192);
image = BitmapFactory.decodeStream(bis);
//image = BitmapFactory.decodeStream(connection.getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
PHP代码:
<?php
if($_SERVER['REQUEST_METHOD']=='GET'){
$id = $_GET['id'];
$sql = "SELECT image FROM images WHERE id = '$id' ";
$con = mysqli_connect("localhost","root","","othmane");
$r = mysqli_query($con,$sql);
$result=mysqli_fetch_array($r);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';
}
else{
echo "Error";
}
?>
&#13;
答案 0 :(得分:0)
您发送的是一个HTML img
标记,而不是您实际需要显示位图的数据。而不是
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';
尝试echo
数据
echo $result['image'];
您可能确实需要base64_encode
才能使其真正发挥作用。问题是SkImageDecoder
并不期待HTML。如果您不想更改PHP,可以在android中加载webview
以查看图像,这将起作用,因为webview
知道如何显示HTML。
答案 1 :(得分:0)
我终于明白了,echo base64_encode($ result [&#39; image&#39;])对我不起作用,我不知道为什么。在网上搜索后,我发现这3行正确显示图像,每一行都是必要的:
header('Content-Type:image/jpeg');
stripslashes ($result['image']);
echo $result['image'];
&#13;
并且在Android应用程序中,我终于可以从我的php URL获取图像并将其显示在ImageView上