繁体   English   中英

如何将图像保存到Android中的SQLite数据库?

[英]How to save image to SQLite Database in android?

MySQL Database我有一个包含name and image的表。 我想将这些详细信息输入android。

我使用PHPDatabase获取数据。

我的PHP code

<?php
$db_host = $_POST['db_host'];
$db_uname = $_POST['db_user_name'];
$db_password = $_POST['db_password'];
$conn = mysql_connect($db_host, $db_uname, $db_password);
$query = $_POST['query'];
$db_name = $_POST['db_name'];
mysql_select_db($db_name);
$result_set = mysql_query($query, $conn);
while($row = mysql_fetch_array($result_set)) {
    print "name:{$row['name']},image:" . base64_decode($row['image']) . ";
}
mysql_close($conn);

?>

我得到的name很完美,并且image格式如下

LzlqLzRBQVFTa1pKUmdBQkFnRUFZQUJnQUFELzdnQU9RV1J2WW1VQVpBQUFBQUFCLytFVFhVVjRhV1lBQUUxTkFDb0FBQUFJQUFjQk1nQUNBQUFBRkFBQUFHSUJPd0FDQUFBQUJ3QUFBSFpIUmdBREFBQUFBUUFFQUFCSFNRQURBQUFBQVFBL0FBQ2NuUU

上面显示的格式仅作为示例。

我作为图像获取的字符串使用ContentValues保存到SQLite Database

现在,我需要在Android屏幕上显示保存在SQLiteimage

我的代码是这样的:

 ByteArrayInputStream input_stream = new ByteArrayInputStream(moviesList.get(i).getMovieImage());
 Bitmap bitmap = BitmapFactory.decodeStream(input_stream);
 movie_image.setImageBitmap(bitmap);

但是我无法获得图像?

请帮我解决这个问题。 谢谢

UPDATE

我不从事Android开发,但是就PHP部分而言:

<?php 
// config.php

$db_host ='';
$db_uname = '';
$db_password = '';
$db_name = '';
$api_key = 'HERE_WE_DEFINE_A_SECRET_KEY';

?>

<?php
// file you're calling
require_once 'path/to/config.php';

$conn = mysql_connect($db_host, $db_uname, $db_password);

# check if your receiving a post call
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if($_POST['api_key'] !== $api_key)
    {
        echo 'No access';
        exit(1);
    }

    switch($_POST['command'])
    {
        // this is how you call a certain action
        case 'GET_IMAGE':
            // Do the stuff you want to do.
            require_once 'path/to/getImage.php';
        break;
        default:
             // If no command is specified 
        break;
    }
}
?>

<?php
// getImage.php
if(!$conn)
{
    echo 'No connection';
    exit(1);
}
// sanitize input
if(!isset($_GET['id']) || !is_numeric($_GET['id']))
{
    echo 'Invalid ID';
    exit(1);
}
$image_id = $_GET['id'];
$query="SELECT * FROM images WHERE id = {$image_id}";

$result_set = mysql_query($query, $conn);
while($row = mysql_fetch_array($result_set)) 
{
    echo "name:{$row['name']},image:" . base64_decode($row['image']) ;
}
?>

现在,如果我们调用该url,就可以开展业务-而且我们很安全!

yourhost.com/yourfile.php?api_key=HERE_WE_DEFINE_A_SECRET_KEY&command=GET_IMAGE&id=3


原始帖子在上面的php示例中,您遇到了解析错误。

print "name:{$row['name']},image:" . base64_decode($row['image']) . ";

在分号之前需要额外的“”。

print "name:{$row['name']},image:" . base64_decode($row['image']) . "";

PS:有人提到过通过HTTP发送MYSQL凭据不是很安全吗? 还要_POST完成QUERIES吗?

1.)如果您正在构建应用程序,并且有人使用了WIRESHARK之类的程序,那么您将遇到很大的麻烦。

2.)您不应该这样做。 最好是在本地设置所有凭据,已准备好查询,并使用秘密密码(基本上就是API密钥)或用于检索数据的内容。

那呢?

byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

我建议您将文件存储在光盘上,创建文件Uri并将Uri而不是图像数据存储在数据库中。

如果仍然需要存储图像数据,请查看以下答案: https : //stackoverflow.com/a/32646725/383676

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM