我是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 开始
这真是一段冗长的代码,我很感激您花时间阅读它。
对此的任何帮助都将非常非常感谢。超过两天,没有解决方案。 : - (
答案 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);
}