Question

Je prototype une application Android et je dois obtenir des images d'un serveur Web vers Android ListView. Je comprends le côté Android des choses (bien que je ne puisse pas implémenter et tester) via ce fil Chargement paresseux d'images dans ListView

J'ai besoin d'aide avec le côté PHP / serveur de celui-ci. Les images particulières qui doivent être remplies dans une vue de liste seront décidées dynamiquement (ces images qui ont une balise donnée). Je suis nouveau dans les applications Web, mais j'ai réussi à configurer un serveur Web qui peut exécuter des scripts PHP.

1) Android décide des balises à récupérer. Fait une connexion HTTP et appelle un script PHP avec la balise donnée comme paramètre.

2) Le script PHP recherche la base de données MySQL pour la balise, décide des ID des images à télécharger, qui sont stockées dans un dossier.

3) [Voici où je ne sais pas comment implémenter] Le PHP envoie ces images suivies de méta-données associées à chaque image. Le nombre d'enregistrements à envoyer ne sera pas corrigé à l'avance et sera décidé par le nombre d'enregistrements renvoyé par MySQL (seul maximum sera fixé).

J'apprécierais grandement tous les exemples de scripts et les conseils vers l'endroit où je pourrais trouver plus d'informations pour mieux comprendre le travail intérieur. De plus, s'il y a de meilleurs frameworks pour faire ce que je veux, je suis heureux d'apprendre à ce sujet (je ne suis pas marié à PHP / MySQL).

Était-ce utile?

La solution

Je suppose que vous devez utiliser JSON pour envoyer des données à votre appareil mobile via une connexion HTTP. Pour une connexion Internet faible, je ne préfère pas le savon.

Si vous ne pouvez pas charger d'images directement via URL HTTP, vous pouvez également envoyer des données d'image dans JSON et un type MIME et créer un objet image via des données d'image.

Autres conseils

Il s'agit du code pour obtenir l'image unique et affiché dans la vue d'image.

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
    }
}
  }

Fichier 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); 

?> 

Si j'étais toi, je ferais un NOSOAP PHP http://android-develovers.blogspot.com/2009/05/painless-threading.html

pour les images de chargement. API J'utiliserais KSOAP2 téléchargement

Le reste lit beaucoup mais en fait c'est facile: D

J'ai utilisé un INPUTSTREAM et OutputStream, tout comme vous téléchargez des fichiers avec Java. Je reçois d'abord le nom de fichier (sur le serveur) à partir d'un script PHP / JSON. Hors sûr, cette méthode pourrait être optimisée qu'elle efface les anciens fichiers dans le dossier de cache.

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top