Получать изображения с PHP-сервера на Android

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

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

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

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

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

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

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

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

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

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); ?> в <?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); ?> 

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

для загружаемых изображений. Api, я бы использовал ksoap2 dowload

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

Я использовал 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; }