2012-04-22 92 views
0

我是新手,雖然我已經通過了常見問題解答,但希望我能正確理解這個問題。將已解析的URL(從JSON)添加到字符串數組

的背景

我已經成功地得到使用Facebook SDK數據和自定義列表視圖中顯示它們。然而,就像任何初學者一樣,我總是放慢速度,列表視圖像瘋了似的。爲了彌補這一點,我開始實施利用SO這個例子延遲加載: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有一個錯誤,如果在新聞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

回答

0

如果你有一個這樣的硬編碼定義:

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