如何在Android中使用json从mysql数据库中检索图像
我从php获取json数据。并传递到Android如何在Android中使用json从mysql数据库中检索图像
这里是我的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手机中的最后一张图片..我想显示从数据库中的所有图像到一个ndroid手机请帮助我如何使用json数据获取所有图像
低你已经有一个相当复杂的代码。不过,我觉得你的问题很简单:你真正得到的所有图像,但在这两条线:
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
不一定会逐一显示图像。
雅sir你告诉完全正确我在我的模拟器中使用您的for循环获得以前的图像。我想在我的模拟器中显示所有图像..请帮助m – 2012-03-24 10:08:27
我很害怕这个...好吧,我会尝试这个给我几点时间 – 2012-03-24 10:12:09
先生我想在我的模拟器中显示所有图像请说我可能的解决方案 – 2012-03-24 10:14:29
这个信息不足。我们需要了解更多关于php代码提供的服务以及您从他们那里得到的答案。什么是'Qrimage'? 'e'在这里是什么:'Qrimage = e.getString(“itemimage”)' – 2012-03-24 08:00:37
上面的代码我的php代码 – 2012-03-24 08:50:16
请修改您的问题,像这样的阐述。你还没有提供java端代码:构建你的'e'的逻辑。 – 2012-03-24 09:11:17