2014-01-22 43 views
0

我正在使用GridViewViewPager構建一個圖庫應用程序。我從JSON獲取圖片網址。我已經讓GridView正確顯示圖像,現在我正在轉向ViewPager。我想我需要做的是爲ViewPager適配器生成一個包含圖像URL的String數組。在GridView Activity中,我創建了一個HashMap,其中存儲了id,URL和圖像描述字符串。我現在的問題是:是否可以通過從HashMap中檢索所有存儲的URL字符串來生成一個字符串數組?我需要的,這是從HashMap中:Android:從哈希映射中抽取字符串數組

public static final String[] imagesStr = new String[] { 
     "http://www.mysite/images/building0001.jpg", 
     "http://www.mysite/images/building00011.jpg", 
     "http://www.mysite/images/building0010.jpg" }; 

這裏是我是如何產生的HashMap的:

 @Override 
    protected Void doInBackground(Void... params) { 
     // Retrieve JSON Objects from the given URL address 
     galleryArrList = new ArrayList<HashMap<String, String>>(); 
     jsonobject = JIJSONfunctions.getJSONfromURL(urlPathStr); 

     try { 
      // Locate the array name in JSON 
      JSArrGallery = jsonobject.getJSONArray("gallery"); 

      for (int i = 0; i < JSArrGallery.length(); i++) { 
       JSONObject galleryJO = JSArrGallery.getJSONObject(i); 
       idStr = galleryJO.getString(TAG_ID); 
       urlStr = galleryJO.getString(TAG_URL); 
       descrStr = galleryJO.getString(TAG_DESCR); 

       // creating new HashMap 
       HashMap<String, String> map = new HashMap<String,String>(); 
       // adding each child node to HashMap key => value 
       map.put(TAG_ID, idStr); 
       map.put(TAG_URL, urlStr); 
       map.put(TAG_DESCR, descrStr); 

       galleryArrList.add(map); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

我如何HashMap的作品有點不清楚,但我假設代碼正在通過JSON數組並拉出每個URL字符串並將其存儲在HashMap中,對嗎?那麼現在我可以將所有收集的URL字符串拉出來,並用它們創建一個字符串數組?我會怎麼做?

+0

您可以使用列表本身 '字符串URL = galleryArrList.get(0)獲得(TAG_URL);' – Raghunandan

回答

0

似乎很簡單。填充完List<HashMap<String,String>>後,遍歷每張地圖並從中提取需要的值以添加到String[]。請參閱以下代碼片段:

galleryArrList = new ArrayList<HashMap<String, String>>(); 
jsonobject = JIJSONfunctions.getJSONfromURL(urlPathStr); 
try { ... } 

final int length = galleryArrList.size(); 
final String[] imagesStr = new String[length]; 
for (int i = 0; i < length; i++) { 
    final Map<String, String> map = galleryArrList.get(i); 
    imagesStr[i] = map.get(TAG_URL); 
} 
+0

感謝JuniKim。您的解決方案似乎最初工作,但現在我無法正確地打包imagesStr []。 – kirktoon1882

+0

我很抱歉,但我不完全明白你的意思是「正確捆綁」。你能澄清一下嗎? – JuniKim

+0

JuniKim,我試圖捆綁String [],這是一個與我在這裏詢問的不同的問題。我不應該在評論中提到它。底線:你的解決方案爲我工作。 – kirktoon1882

0

您可以嘗試使用ArrayList並將URL添加到for循環中的ArrayList。循環完成後,您可以使用ArrayList.toArray(T []數組)方法將ArrayList中的URL複製到String數組中。

ArrayList.toArray

ArrayList arlist = new ArrayList(); 
for (int i = 0; i < JSArrGallery.length(); i++) { 
    JSONObject galleryJO = JSArrGallery.getJSONObject(i); 
    idStr = galleryJO.getString(TAG_ID); 
    urlStr = galleryJO.getString(TAG_URL); 
    descrStr = galleryJO.getString(TAG_DESCR); 

    // creating new HashMap 
    HashMap<String, String> map = new HashMap<String,String>(); 
    // adding each child node to HashMap key => value 
    map.put(TAG_ID, idStr); 
    map.put(TAG_URL, urlStr); 
    map.put(TAG_DESCR, descrStr); 

    galleryArrList.add(map); 

    arlist.add(urlStr); 
} 

// Create a String array to hold the URLs  
String[] arUrls = new String[arlist.size()]; 

// Copy the URLs from the ArrayList to the String array 
arlist.toArray(arUrls);