Получить изображения и метаданные с сервера PHP на Android - PullRequest
4 голосов
/ 16 августа 2011

Моему приложению для Android нужно получить некоторую информацию с php-сервера, на котором размещена база данных MySQL.Пока все отлично работает.Сервер кодирует информацию в JSON и отправляет ее, а затем я могу хорошо ее проанализировать.

Но теперь мне нужно также получить изображение вместе с каждой строкой информации, полученной из БД.У информации, которую я получаю, есть поле, в котором указывается путь, в котором находится соответствующее изображение в файловой системе.

Итак, как только я получу пути к изображениям, как мне их прочитать, чтобы я моготправить их вместе с полученными информационными строками?Могу ли я JSON кодировать изображения вместе с информацией?Или я должен прочитать их один за другим с помощью readfile, как только у меня появится информация в приложении для Android?Если это можно сделать с помощью JSON, как вы впоследствии анализируете данные изображения?Можете привести пример?

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

Один из способов получить изображение в текстовой форме - использовать base64 .Я использовал его с несколькими веб-сервисами, и на самом деле есть Android-декодеры.Он есть в исходном коде начиная с уровня API 8. http://developer.android.com/reference/android/util/Base64.html, но так как я хочу нацеливаться на другие уровни, я включаю его самОдин из простых способов - сохранить изображение в базе данных, а не в виде файла.

0 голосов
/ 27 ноября 2013

для загрузки изображения по пути

        public void DownloadImageFromPath(String path){
            InputStream in =null;
            Bitmap bmp=null;
             ImageView iv = (ImageView)findViewById(R.id.img1);
             int responseCode = -1;
            try{

                 URL url = new URL(path);//"http://192.xx.xx.xx/mypath/img1.jpg
                 HttpURLConnection con = (HttpURLConnection)url.openConnection();
                 con.setDoInput(true);
                 con.connect();
                 responseCode = con.getResponseCode();
                 if(responseCode == HttpURLConnection.HTTP_OK)
                 {
                     //download 
                     in = con.getInputStream();
                     bmp = BitmapFactory.decodeStream(in);
                     in.close();
                     iv.setImageBitmap(bmp);
                 }

            }
            catch(Exception ex){
                Log.e("Exception",ex.toString());
            }
        }
0 голосов
/ 28 августа 2011

Это то, что я сделал, чтобы получить изображения вместе с данными.Я выкладываю это так, что если это может кому-то помочь.

Это часть скрипта PHP, которая отправляет данные на стороне сервера:

    $i=0;
    //$sql contains the result from the query of the data
    while($row=mysql_fetch_array($sql)){
        $output[]=$row;

        //Here we fetch the image from the files table
        $query = "SELECT path, type FROM FILES WHERE poi_id = '" . mysql_real_escape_string(trim($output[$i][0])) . "'";
        $r = mysql_query($query);
        $img = mysql_fetch_array($r);
        $bin = base64_encode_image($img[0]);

        //Let's append the image and the type to the data output.
        $output[$i]['img'] = $bin;
        $output[$i]['type'] = $img[1];
        $i++;
    }
    //This method sends the response to the Android app
    //You can just use echo(json_encode($output)); 
    RestUtils::sendResponse(200, json_encode($output), 'application/json');

А затем в приложении Android после анализа JSON вы можете сохранить строку base64как изображение для файловой системы, например:

public void createImage(String image, String name){
    try{
        byte[] imageAsBytes = Base64.decode(image.getBytes(), Base64.DEFAULT);
        Bitmap img_bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);

        FileOutputStream fos = openFileOutput(name, Context.MODE_WORLD_READABLE);

        img_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();

    }
    catch(Exception e){
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...