0

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

的背景

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

绊脚石

在这个示例中,@Fedor 已将 URL 硬编码为字符串数组。现在我想用从 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 有一个错误,如果新闻提要上有共享帖子,它不会给出“图片”标签,并且必须进行另一个查询才能使用“object_id”标签获取图片 URL。在 pastebin 代码中,这被放入从第155if + else if行开始的代码块中

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

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

4

1 回答 1

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);
}
于 2012-04-22T20:31:45.133 回答