2012-03-24 153 views
0

我從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數據獲取所有圖像

+0

這個信息不足。我們需要了解更多關於php代碼提供的服務以及您從他們那裏得到的答案。什麼是'Qrimage'? 'e'在這裏是什麼:'Qrimage = e.getString(「itemimage」)' – 2012-03-24 08:00:37

+0

<?mysql_connect(「localhost」,「root」,「MobixMySQL」); mysql_select_db(「cozydine」); $ q = mysql_query(「SELECT itemimage from fooditem」); ($ obj = mysql_fetch_object($ q)){ $ arr [] = $ obj; } echo'{「names」:'。json_encode($ arr)。'}'; mysql_close(); ?> 上面的代碼我的php代碼 – 2012-03-24 08:50:16

+0

請修改您的問題,像這樣的闡述。你還沒有提供java端代碼:構建你的'e'的邏輯。 – 2012-03-24 09:11:17

回答

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不一定會逐一顯示圖像。

+0

雅sir你告訴完全正確我在我的模擬器中使用您的for循環獲得以前的圖像。我想在我的模擬器中顯示所有圖像..請幫助m – 2012-03-24 10:08:27

+0

我很害怕這個...好吧,我會嘗試這個給我幾點時間 – 2012-03-24 10:12:09

+0

先生我想在我的模擬器中顯示所有圖像請說我可能的解決方案 – 2012-03-24 10:14:29

相關問題