将解析URL(从JSON)添加到字符串数组

时间:2012-04-22 19:59:32

标签: android facebook json

我是SO的新手,虽然我已经浏览了常见问题解答,但我希望我能正确回答这个问题。

背景

我成功地使用Facebook SDK获取数据并将其显示在自定义列表视图中。然而,就像任何一个初学者一样,我总是放慢速度,而listview就像疯了一样。为了解决这个问题,我开始使用SO中的这个示例实现延迟加载:https://stackoverflow.com/a/3068012/450534

捣乱阻碍

我的这个例子@Fedor已将URL硬编码为字符串数组。现在我想将那个String数组替换为从Facebook查询结果(JSON)中获取的那些。

此外,这是一个很好的例子(严格来说,这个场景)还是有一个更好的例子?我花了将近2天的时间试图找出延迟加载的部分。但是,由于缺乏有效的搜索或我刚刚开始的事实,我感到难过。

我希望这个问题有道理。谢谢你的建议。

...干杯

使用JSON返回的图像链接示例,用于解析Facebook查询。

04-23 01:44:28.505: V/PICTURE LINK URL :(3902): https://s-external.ak.fbcdn.net/safe_image.php?d=AQBZ5-jVGrHA2hpU&w=90&h=90&url=http%3A%2F%2Fblog.mozilla.org%2Ftheden%2Fwp-content%2Fthemes%2FTheDen%2Fimg%2Fbg-header.png

@Fedor在他的例子中硬编码URL的方式的一部分。

private String[] mStrings={
            "http://a1.twimg.com/profile_images/349012784/android_logo_small_normal.jpg",
            "http://a1.twimg.com/profile_images/841338368/ea-twitter-icon.png",
            "http://a3.twimg.com/profile_images/64827025/android-wallpaper6_2560x160_normal.png",
            "http://a3.twimg.com/profile_images/77641093/AndroidPlanet_normal.png",
            "http://a1.twimg.com/profile_images/850960042/elandroidelibre-logo_300x300_normal.jpg",
            "http://a1.twimg.com/profile_images/655119538/andbook.png",
            "http://a3.twimg.com/profile_images/768060227/ap4u_normal.jpg",
            "http://a1.twimg.com/profile_images/74724754/android_logo_normal.png",
            "http://a3.twimg.com/profile_images/681537837/SmallAvatarx150_normal.png"
    };

修改

新编辑需要占用大量空间。因此,我将它连接到pastebin:http://pastebin.com/HZfCTMy6

facebook API有一个错误,如果新闻Feed上有共享帖子,则不会提供“图片”标记,并且必须使用“object_id”标记进行另一个查询以获取图片网址。在pastebin代码中,这是一个if + else if代码块,从行号 155 开始

这真是一段冗长的代码,我很感激您花时间阅读它。

对此的任何帮助都将非常非常感谢。超过两天,没有解决方案。 : - (

1 个答案:

答案 0 :(得分:0)

如果你有这样的硬编码定义:

class A {
    private String[] strings = { "str1", "str2", ... };

    public A() {
        ...
    }
    ...
}

你可以通过添加一个setter(并将String数组更改为动态集合)来简单地破解它:

class A {
    private ArrayList<String> strings;

    public A() {
        this.strings = new ArrayList<String>();
        ...
    }

    public void addString(String str) {
        this.strings.add(str);
    }
    ...
}

如果构造函数中依赖于数组的代码具有值,则将其移动到新方法并在添加完字符串后调用它。

至于来自facebook的数据格式,因为它们返回json,很容易获得所需的确切数据,只需提取所需的URL并将它们添加到列表中。


修改

这是来自您的代码:

ArrayList<String> listOfURLS;
....
if (json_data.has("picture"))   {
    for (int j = 0; j < json_data.length(); j++) {
        listOfURLS = new ArrayList<String>();
        listOfURLS.add(changedString);
    }
} else if (json_data.has("object_id")) {
    getPictureURL();
    listOfURLS = new ArrayList<String>();
    listOfURLS.add(finalPictureFromObjectID);
}

这当然会导致 listOfUrls 中只有一个url,每次都构造一个新的 ArrayList ,你不应该这样做。 它应该看起来像:

ArrayList<String> listOfURLS;
....
if (json_data.has("picture"))   {
    for (int j = 0; j < json_data.length(); j++) {
        listOfURLS.add(changedString);
    }
} else if (json_data.has("object_id")) {
    getPictureURL();
    listOfURLS.add(finalPictureFromObjectID);
}