5

我正在制作一个 android 应用程序的原型,需要将图像从 web 服务器获取到 Android ListView。我通过这个线程了解了事物的 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 webservice nosoap http://android-developers.blogspot.com/2009/05/painless-threading.html

用于下载图像。Api 我会使用 ksoap2下载

其余的阅读很多,但实际上很容易:D

于 2011-05-17T07:05:16.730 回答
0

我使用了 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;
}
于 2011-05-17T16:16:17.773 回答