2014-04-13 111 views
0

我剛剛開始使用Android編程,並且對某些概念仍有點困惑。我會告訴你我正在嘗試使用一個簡化的示例:從任何類獲取Android資源值

我從遠程服務器(PHP/MySQL/JSON)中檢索汽車列表並在ListView上顯示它們。

這是服務器響應JSON結構:

{ 
    error: null, 
    data: { 
     cars: [ 
      {name: "Lamborghini Diablo", color_id: 1}, 
      {name: "McLaren F1", color_id: 2}, 
      {name: "Ferrari F355", color_id: 1} 
     ] 
    } 
} 

然後我寫了類:

public class Car { 

    public String name; 
    public int color_id; 
    public String color_name; 

    public Car(JSONObject data) { 
     try { 
      this.name = data.getString("name"); 
      this.color_id = data.getInt("color_id"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

而在去年,這是一塊strings.xml中的資源文件:

<string-array name="color_names"> 
    <item>White</item> 
    <item>Yellow</item> 
    <item>Orange</item> 
    <item>Red</item> 
    <item>Black</item> 
</string-array> 

當我從服務器獲取數據時,會有一個for循環來創建Car類的實例,其中一個用於JSONArray中的每個項目。

我想要做的就是從<string-array>獲得顏色名稱,使用屬性color_id作爲數組的索引,但我不能找到一種方式來獲得從Car類構造R.array資源。

我該怎麼做?

謝謝!

回答

0

你應該提供上下文ot Car對象或實例化來自某些具有app上下文的util類中的res數組,並提供類似於Utils.getColorNameByColorId(int color_id)的API。最後一種方式更好,因爲性能 - 數組將只實例化一次。

+0

你能給我一個Utils類的最小代碼嗎?是靜態類嗎?它如何知道應用程序的上下文?謝謝 – Gonzalingui

1

我想要做的就是使用屬性COLOR_ID作爲數組索引從, ,使色彩的名字,但我不能找到一個辦法 獲得從Car類的R.array資源構造函數。

你的類必須知道「上下文」 因爲資源只能從上下文,所以在這裏你需要在你的構造函數稍加修改:

public Car(Context c, JSONObject data) { 
    // do your stuff 
} 

現在,你的類就知道當前上下文所以你能夠獲得你需要的數據:

String name = c.getResources().getStringArray(R.id.arrayId)[<index>]; 

希望它能解決你的問題。