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

Я создаю прототип приложения для Android, и мне нужно получить изображения с веб-сервера в Android ListView. Я понимаю андроидную сторону вещей (хотя я еще не реализовал и не протестировал) через эту ветку Ленивая загрузка изображений в ListView

Мне нужна помощь с PHP / серверной стороной. Определенные изображения, которые должны быть заполнены в виде списка, будут определены динамически (те изображения, которые имеют данный тег). Я новичок в веб-приложениях, но мне удалось настроить веб-сервер, который может запускать сценарии PHP.

1) Android решает, какие теги получить. Создает соединение HTTP и вызывает скрипт PHP с указанным тегом в качестве параметра.

2) Сценарий PHP ищет в базе данных MySQL тег, определяет идентификаторы загружаемых изображений, которые хранятся в папке.

3) [Вот где мне неясно, как реализовать] PHP отправляет эти изображения, а затем метаданные, связанные с каждым изображением. Количество отправляемых записей не будет фиксировано заранее и будет определяться количеством записей, возвращаемых MySQL (будет фиксироваться только максимум).

Я был бы очень признателен за любые примеры сценариев и указатели на то, где я мог бы найти больше информации, чтобы лучше понять внутреннюю работу. Кроме того, если есть более подходящие фреймворки, чтобы делать то, что я хочу, я буду рад узнать об этом (я не женат на PHP / MySQL).

Ответы [ 4 ]

4 голосов
/ 18 октября 2013

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

public class Database_demo extends Activity {

public static final int DIALOG_DOWNLOAD_JSON_PROGRESS = 0;

int[] flags;
String strImageName;
int n = 10000;
String[] mySecondStringArray = new String[n];
String[] strArray;

HashMap<String, String> hm;
List<HashMap<String, String>> aList;
InputStream is = null;
String result = "";
JSONObject jArray = null;
private String Qrimage;
private Bitmap bmp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.news);

    try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(
                "http://192.168.1.50/XXXX/getimage.php");
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    } catch (Exception e) {
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();
        jArray = new JSONObject(result);
        JSONArray json = jArray.getJSONArray("tablename");
        for (int i = 0; i < json.length(); i++) {
            HashMap<String, String> map = new HashMap<String, String>();
            JSONObject e = json.getJSONObject(i);
            Qrimage = e.getString("imagefieldname");
            System.out.println(Qrimage);

            byte[] qrimage = Base64.decode(Qrimage.getBytes(), i);

            System.out.println(qrimage);
            bmp = BitmapFactory.decodeByteArray(qrimage, 0, qrimage.length);
            ImageView imageview = (ImageView) findViewById(R.id.flag);

            imageview.setImageBitmap(bmp);
        }
    } catch (Exception e) {
        // TODO: handle exception
    }
}
  }

Php файл

<?php
$host="localhost"; //replace with database hostname 
$username="root"; //replace with database username 
$password=""; //replace with database password 
$db_name="databasename"; //replace with database name

$con=mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");




$sql = "SELECT * FROM tablename"; 

$result1 = mysql_query($sql);

$json = array();

if(mysql_num_rows($result1)){
while($row=mysql_fetch_assoc($result1)){
$json['tablename'][]=$row;
}
}


mysql_close($con);
echo json_encode($json); 

?> 
1 голос
/ 17 мая 2011

Полагаю, вам следует использовать JSON для отправки данных на ваше мобильное устройство через HTTP-соединение.При низком интернет-соединении я не предпочитаю SOAP.

Если вы не можете загружать изображения напрямую через HTTP-URL, вы можете отправлять данные изображения в формате JSON, а также mime-тип и создавать объект изображения через данные изображения.

0 голосов
/ 17 мая 2011

Я использовал InputStream и OutputStream, так же, как вы скачиваете файлы с Java. Сначала я получаю имя файла (на сервере) из скрипта PHP / JSON. Конечно, этот метод можно оптимизировать, так как он очищает старые файлы в папке кэша.

private static File getImage(String filename) {
    String localFilename = new File(filename).getName();

    File img = new File("/sdcard/app/tmp/" + localFilename);

    // Create directories
    new File("/sdcard/app/tmp/").mkdirs();

    // only download new images
    if (!img.exists()) {
        try {
            URL imageUrl = new URL("http://example.com/images/" + filename);
            InputStream in = imageUrl.openStream();
            OutputStream out = new BufferedOutputStream(new FileOutputStream(img));

            for (int b; (b = in.read()) != -1;) {
                out.write(b);
            }
            out.close();
            in.close();
        } catch (MalformedURLException e) {
            img = null;
        } catch (IOException e) {
            img = null;
        }
    }
    return img;
}
0 голосов
/ 17 мая 2011

На вашем месте я бы сделал php webservice nosoap http://android -developers.blogspot.com / 2009/05 / painless-threading.html

для загрузки изображений. API я бы использовал ksoap2 скачать

остальное много читает, но на самом деле это легко: D

...