5

私はAndroidアプリケーションのプロトタイプを作成しており、WebサーバーからAndroidListViewに画像を取得する必要があります。このスレッドを介して、Android側のことを理解しています(まだ実装とテストは行っていませんが)。ListViewでの画像の遅延読み込み

PHP/サーバー側のサポートが必要です。リストビューに入力する必要のある特定の画像は動的に決定されます(特定のタグを持つ画像)。私はWebアプリケーションを初めて使用しますが、PHPスクリプトを実行できるWebサーバーをセットアップすることができました。

1)Androidは、取得するタグを決定します。HTTP接続を確立し、指定されたタグをパラメーターとして使用してPHPスクリプトを呼び出します。

2)PHPスクリプトは、MySQLデータベースでタグを検索し、フォルダーに保存されているアップロードする画像のIDを決定します。

3)[ここで実装方法がわかりません] PHPはこれらの画像を送信し、その後に各画像に関連付けられたメタデータを送信します。送信するレコードの数は事前に固定されることはなく、MySQLによって返されるレコードの数によって決定されます(最大数のみが固定されます)。

サンプルスクリプトと、内部の動作をよりよく理解するためのより多くの情報を見つけることができる場所へのポインタをいただければ幸いです。また、私がやりたいことを実行するためのより良いフレームワークがあれば、それについて学ぶことができてうれしいです(私はPHP / MySQLと結婚していません)。

4

4 に答える 4

4

これは、単一の画像を取得して画像ビューに表示するためのコードです。

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

?> 
于 2013-10-18T13:01:51.497 に答える
1

JSONを使用して、HTTP接続を介してモバイルデバイスにデータを送信する必要があると思います。インターネット接続が少ない場合、私はSOAPを好みません。

HTTP URLを介して画像を直接ロードできない場合は、JSONで画像データを送信できます。mimeタイプも同様に、画像データを介して画像オブジェクトを作成できます。

于 2011-05-17T07:40:41.710 に答える
0

もし私があなたなら、php webservicenosoaphttp://android-developers.blogspot.com/2009/05/painless-threading.htmlを実行します

ダウンロード画像用。Apiの私はksoap2ダウンロードを使用します

残りはたくさん読んでいますが、実際には簡単です:D

于 2011-05-17T07:05:16.730 に答える
0

Javaでファイルをダウンロードするのと同じように、InputStreamとOutputStreamを使用しました。まず、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;
}
于 2011-05-17T16:16:17.773 に答える