Получить BLOB-образ из базы данных mysql через JSON
У меня есть образ, сохраненный как BLOB в моей базе данных MySQL. Я возвращаю изображение обратно в приложение android через массив PHP JSON следующим образом: $row_array['image'] = base64_encode($row['image']);
Теперь я получаю значение в android, как это String image = c.getString(TAG_IMAGE);, где c-объект JSON. Затем я попытался расшифровать его
byte[] b = Base64.decode(image, 0);
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
Но это просто дает мне исключение нулевого указателя и аварийно завершает работу. Что я здесь делаю не так?
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)
2 ответов:
Предположим, что
event- это имя таблицы,image- имя столбца, содержащего изображениеBLOB, аuser_id- идентификатор пользователя/строки . Чтобы извлечь изображение из BLOB-объекта, необходимо создать дополнительный 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' }Итак, с помощью Андроида вы можете декодировать изображение следующим образом
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; }
<?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']; ?>
Comments