2015-12-17 157 views
2

MySQL Database我有一个表格,包含name and image。我想把这些细节放到android中。我使用PHPDatabase获取数据。如何在android中将图像保存到SQLite数据库?

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屏幕上显示保存在SQLite中的image

我的代码是这样的:

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

,但我没能获得的形象呢?

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

回答

0

那又如何?

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

我试过你的代码也Hrabosch。但没有用 –

+0

嘿你的代码工作。我已经尝试过你的代码,但'Base64.decode()方法'接受'byte []'和'String'作为第一个参数。使用'string'解决了这个问题 –

+0

:)所以它很好,它为你工作。 – Hrabosch

0

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 &命令= GET_IMAGE & ID = 3


ORIGINAL POST 那么在php上面例子你有一个解析错误。

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

分号之前需要一个额外的“

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

PS:是不是有人提到它的不是真的安全通过HTTP发送MYSQL凭证更有甚者,以_POST完整查询

? 1.)如果你的应用程序构建成功,并且有人使用WIRESHARK这样的程序,那么你遇到了很大的麻烦。

2.)你不应该这样做。 Beter在本地设置所有证书,准备好QUERIES并使用秘密密码(基本上就是API密钥)或其他东西来检索数据。

+0

没错。这是我在将代码粘贴到堆栈溢出时所犯的错误。 我从“PHP”到“android”的数据成功。我的问题是我在'PHP'中得到的格式是正确的吗? –

+0

如果通过'POST'发送'输入数据(查询)'不正确,您可以发布一些'代码',这是将输入数据发送到PHP的更好方法。' –

+0

我更新了我的文章。但是找到你的PHP生成数据的真正问题是正确的,就是通过找出'ByteArrayInputStream'的输入是什么,所以'BitmapFactory.decodeStream'可以对它进行整齐的解码。 我怀疑 – Lapidi

0

我建议你存储在光盘上的文件,创建一个文件URI并在数据库中,而不是存储图像数据的URI。

如果您仍然需要存储的图像数据,看看这个答案: https://stackoverflow.com/a/32646725/383676

+0

嘿,我得到了解决这个问题。我没有将图像保存在'SQLite'中,但我保存了'Base64格式',然后使用 'byte [] decodedImage = Base64.decode(base64format,Base64.DEFAULT);' 'Bitmap bitmap = BitmapFactory.decodeByteArray(decodedImage ,0,decodedImage.length);' –

相关问题