2015-05-16 9 views
2

У меня есть изображение, сохраненное как BLOB в моей базе данных MySQL. Я возвращаю изображение обратно к андроидному приложению через массив PHP JSON следующим образом: $row_array['image'] = base64_encode($row['image']); Теперь я получаю значение в android, как это String image = c.getString(TAG_IMAGE); где c - объект JSON. Затем я попробовал расшифровать егоПолучить изображение BLOB из базы данных mysql через JSON

byte[] b = Base64.decode(image, 0); 

Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length); 

Но это просто дает мне исключение и ошибки в null-указателе. Что я здесь делаю неправильно?

Logcat:

05-16 15:40:47.469: E/AndroidRuntime(30925): FATAL EXCEPTION: main 
05-16 15:40:47.469: E/AndroidRuntime(30925): java.lang.NullPointerException 
05-16 15:40:47.469: E/AndroidRuntime(30925): at com.example.shareity.ListNew$JSONParse.onPostExecute(ListNew.java:254) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at com.example.shareity.ListNew$JSONParse.onPostExecute(ListNew.java:1) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at android.os.AsyncTask.finish(AsyncTask.java:631) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at android.os.Looper.loop(Looper.java:137) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at android.app.ActivityThread.main(ActivityThread.java:4745) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at java.lang.reflect.Method.invokeNative(Native Method) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at java.lang.reflect.Method.invoke(Method.java:511) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
05-16 15:40:47.469: E/AndroidRuntime(30925): at dalvik.system.NativeStart.main(Native Method) 
+1

Опубликовать исключение. Это на Base64.decode (нет данных на изображении) или в BitmapFactory.decodeByteArray (данные не могут быть должным образом декодированы base64)? –

+0

Он просто говорит, что NullPointerException как бла-бла @JPMoresmau –

+0

@YohanBlake это может быть не похоже на что-то большее, чем «бла-бла», но ваш ответ может быть внутри этого «бла-бла». Если вы публикуете вывод исключения, кто-то может помочь вам найти ответ от него. –

ответ

3

Пусть event это имя таблицы, image это имя столбца, который содержит BLOB изображение и user_id это идентификатор/строки пользователя. Чтобы извлечь изображение из BLOB, вы должны создать EXTRA PHP-файл. который хотел бы что-то вроде этого.

get_image.php

<?php 
$db = mysql_connect("localhost","user","password") or die(mysql_error()); 
mysql_select_db("shareity",$db) or die(mysql_error()); 
$userId = $_GET['eid']; 
$query = "SELECT image FROM event WHERE eid='$userId'"; 
$result = mysql_query($query) or die(mysql_error()); 
$photo = mysql_fetch_array($result); 
header('Content-Type:image/jpeg'); 
echo $photo['image']; 
?> 

Теперь get_image.php подобен изображению. если вы пройдете user_id через GET до get_image.php, то выбросите user_image.

Так что, когда бы вы закодировать JSON из стороны сервера, добавьте поле, добавьте идентификатор пользователя с get_image.php как этот

{ 
'ID':1, 
'userName':'John', 
'image_url':'http://your-host-name/get_image.php?ID=1' 
} 

Так что с Android, вы можете декодировать изображение, как это

try { 
    URL url = new URL("http://your-host-name/get_image.php?ID=1"); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setDoInput(true); 
    connection.connect(); 
    InputStream input = connection.getInputStream(); 
    Bitmap myBitmap = BitmapFactory.decodeStream(input); 
} catch (IOException e) { 
    // Log exception 
    return null; 
} 

Более осветление может быть ФНД here

+0

Это сработало? – theapache64

+0

не могли бы вы рассказать мне, что включить в мой исходный файл php, чтобы получить результат JSON? { "image_url": "http://example.com/myImageDecoder.php?id=1" } '? –

+0

это должно быть '$ row_array ['image'] = something;' Не могли бы вы рассказать мне, что добавить туда? –

1
<?php 
$db = mysql_connect("localhost","user","password") or die(mysql_error()); 
mysql_select_db("shareity",$db) or die(mysql_error()); 
$userId = $_GET['eid']; 
$query = "SELECT image FROM event WHERE eid='$userId'"; 
$result = mysql_query($query) or die(mysql_error()); 
$photo = mysql_fetch_array($result); 
header('Content-Type:image/jpeg'); 
echo $photo['image']; 
?> 
Смежные вопросы