簡體   English   中英

將密鑰從服務器映射到資源

[英]Map keys from the server to resources

請考慮以下事實:您擁有從中獲取數據的API,並且API本身返回某些密鑰,接收方客戶端應使用這些密鑰“解析”要呈現給用戶的人類可讀字符串。

例如,鍵可能看起來像這樣:

DOMAIN_TYPE_SUBTYPE_ID

然后對應於strings.xml的給定條目:

<string name="domain_type_subtype_id">This magical item</string>

不幸的是,人類可讀的值本身並沒有從API傳遞(也不需要翻譯),但是我試圖找出關於如何將鍵映射到值的最佳方法( R.string.abc )以最有效的方式。

我不由自主地看到了兩種前進的方式(因為我無法更改API):

1)根據名稱進行運行時資源查找,並向所有代碼神祈禱,事情不會改變。 基本上:

Resources.getSystem().getIdentifier(keyFromTheApi.toLowerCase(), "id", getPackageName())

但是,從我所聽到和閱讀的內容來看……這確實不是一種高效的方法。 我認為在RecyclerView設置中為多個字符串使用它是一個非常糟糕的主意。

2)在單例類中的所有數據(字符串,整數)的某個位置都有一個靜態查找字段,但是鑒於存在很多要跟蹤的鍵的事實,這可能是不幸的內存命中了嗎?

Map<String, Integer> strings = new HashMap<String, Integer>() {{
    put("DOMAIN_TYPE_SUBTYPE_ID", R.string.domain_type_subtype_id);
    //...
}};

🤔

關於如何以良好方式解決問題的任何建議?

  1. 感覺真的很脆弱,我會避免

  2. 我會做類似的事情,但是要用switch語句:

     public static int lookupStringRes(String value) { switch (value) { case "DOMAIN_TYPE_SUBTYPE_ID": return R.string.domain_type_subtype_id; // ... default: Log.w("TAG", "Resource not found"); return -1; } } 

並不是說這是最好的解決方案,而是我的頭上,這是我將要開始的解決方案。 Map vs Switch歸結為內存與性能之間的關系,您將以內存為代價在Map中進行更快的查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM