2015-12-17 160 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);' –

相關問題