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

问题描述:

我是新手,虽然我已经通过了常见问题解答,但希望我能正确理解这个问题。将已解析的URL(从JSON)添加到字符串数组

的背景

我已经成功地得到使用Facebook SDK数据和自定义列表视图中显示它们。然而,就像任何初学者一样,我总是放慢速度,列表视图像疯了似的。为了弥补这一点,我开始实施利用SO这个例子延迟加载:https://*.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有一个错误,如果在新闻Feed上有一个共享的帖子,它不会给一个“图片”标记和另一个查询必须作出图片网址使用“object_id”标签。在引擎收录的代码,这是摆在if + else if代码块的起始行号

这真是一个漫长的一段代码,我感谢你可能需要通过它去的时间。

任何帮助,这将是真的,真的很感激。两天以上,看不到解决方案。 :-(

+0

你到底在问什么?如何为facebook api结果创建视图?或者如何修改那个例子来做到这一点?如果是这样,那么这个问题太广泛了。如果您遇到更具体的问题,您可以将代码添加到您的问题中吗? – 2012-04-22 20:08:48

+0

我正在拉动Facebook新闻Feed中显示的图片链接。并且使用@ Fedor的Lazy Loading示例,我试图通过字符串数组传递图像链接。字符串阵列ATM是硬编码的。我需要这样做,因为通过JSON获取的链接会随着新闻提要的变化而变化。给我一分钟来添加一些示例代码。 – 2012-04-22 20:12:20

+0

大部分代码都是不相关的,并且与您相关的部分没有放置。* LazyAdapter *的代码在哪里?你说这个问题没有?在这个类中,url是硬编码的,这个对象只使用最后一个url而不是所有这些,所以这就是这里需要的代码。 – 2012-04-23 06:47:28

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

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

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

,你可以简单地增加一个二传手(和不断变化的字符串数组,可以动态集合)打破它:

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只是一个网址,你构建每次一个新的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); 
}