【问题标题】:Android: Pulling a String Array from a HashMapAndroid:从 HashMap 中提取字符串数组
【发布时间】:2014-01-22 18:40:30
【问题描述】:

我正在使用GridViewViewPager 构建一个图库应用。我从 JSON 获取图像 URL。我已经让 GridView 正确显示了图像,现在我将继续使用 ViewPager。我认为我需要做的是为 ViewPager 适配器生成图像 URL 的字符串数组。在 GridView Activity 中,我创建了一个 HashMap,其中存储了 id、URL 和图像描述字符串。我现在的问题是:是否可以通过从 HashMap 中检索所有存储的 URL 字符串来生成字符串数组?我需要的是 HashMap:

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 字符串并用它们创建一个字符串数组吗?我该怎么做?

【问题讨论】:

  • 您可以使用列表本身String url = galleryArrList.get(0).get(TAG_URL);

标签: android json hashmap


【解决方案1】:

看起来很简单。填充List&lt;HashMap&lt;String,String&gt;&gt; 后,遍历每个映射并从中提取所需的值以添加到String[]。请参考以下sn-p:

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);
}

【讨论】:

  • 感谢 JuniKim。您的解决方案最初似乎有效,但现在我无法正确捆绑 imagesStr[]。
  • 对不起,我不太明白您所说的“正确捆绑”是什么意思。你能澄清一下吗?
  • JuniKim,我正在尝试捆绑 String[],这与我在这里询问的问题不同。我不应该在评论中提到它。底线:您的解决方案对我有用。
【解决方案2】:

您可以尝试使用 ArrayList 并将 URL 添加到 for 循环中的 ArrayList。循环完成后,您可以使用 ArrayList.toArray(T[] array) 方法将 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多