如何使用Android中的json从mysql数据库中检索图像

时间:2012-03-24 07:47:18

标签: php android json

我从php获取json数据。并传递给android

这是我的php代码:

<?php
   mysql_connect("localhost","root","MobixMySQL");
   mysql_select_db("cozydine");
   $q=mysql_query("SELECT itemimage from fooditem");
   while($obj=mysql_fetch_object($q)){
       $arr[]=$obj;
   }
   echo '{"names":'.json_encode($arr).'}';
   mysql_close();
?>

以下是我阅读图片的方式:

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("names");
    for (int i = 0; i < json.length(); i++) {
        HashMap<String, String> map = new HashMap<String, String>();
        JSONObject e = json.getJSONObject(i);
        Qrimage=e.getString("itemimage");
        System.out.println(Qrimage);

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

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

以下是我如何解析php代码的响应:

codeInputStream is = null;
String result = "";
JSONObject jArray = null;
try {
    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(serverurl+"showall.php");
    HttpResponse response = httpClient.execute(httpPost);
    HttpEntity entity = response.getEntity();
    is = entity.getContent();
} catch (Exception e) { }

通过这种方式,我只能查看我的Android手机中的最后一张图片..我希望将所有图像从数据库显示到Android手机中请帮助我如何使用json数据获取所有图像

1 个答案:

答案 0 :(得分:2)

低,你有相当复杂的代码。但是,我认为你的问题很简单:你实际上得到了所有的图像,但是在这两行中:

ImageView imageview=(ImageView) findViewById(R.id.imageView1);
imageview.setImageBitmap(bmp);

用下一张图片覆盖prevoius图片。因此,最终只显示最后一个。您可以通过将for循环更改为:

来轻松检查
for (int i = 0; i < json.length() - 1; i++) {

然后应显示倒数第二个图像。如果确实如此,您将需要找到一种同时显示所有图像的方法。

我在代码中找不到任何其他问题,但如果我弄错了,请回信,以便我可以尝试提供更多帮助。

编辑至于如何一起显示图像:您使用图库。图库只是另一种类型的Android小部件(如图像视图)。

在您的活动中,请执行以下几行(初始化您的图库):

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("names");
    Gallery g = (Gallery) findViewById(R.id.gallery);
    g.setAdapter(new ImageAdapter(this, json));

这里我使用图像库适配器,我定义如下:

public class ImageAdapter extends BaseAdapter {

    private ImageView[] mImages;

    public ImageAdapter(Context context, JSONArray imageArrayJson) {
        this.mImages = new ImageView[imageArrayJson.length];
        String qrimage;

        for (int i = 0; i < imageArrayJson.length(); i++) {
            JSONObject image = imageArrayJson.getJSONObject(i);
            qrimage = image.getString("itemimage");

            byte[] qrimageBytes = Base64.decode(qrimage.getBytes());

            bmp = BitmapFactory.decodeByteArray(qrimageBytes,
                                                0,
                                                qrimageBytes.length);
            mImages[i] = new ImageView(context);
            mImages[i].setImageBitmap(bmp);
            mImages[i].setLayoutParams(new Gallery.LayoutParams(150, 100));
            mImages[i].setScaleType(ImageView.ScaleType.FIT_XY);
        }
    }

    public int getCount() {
        return mImages.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        return mImages[position];
    }
}

您需要在活动布局中声明此图片库:

<Gallery xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

希望这一切都能帮助你,但是,我已经在文本编辑器中编写了它,没有尝试,所以可能是我犯了一些错误。如果是这样,请回信。

EDIT2 如果您想垂直堆叠图片,请使用ListView代替图库。您仍然需要设置适配器,但您可以使用我已经提供的相同的适配器。但请注意,ListView不一定会逐个显示图片。