2015-12-09 34 views
0

我不確定這是否完全保存。我從不同的在線資源中讀取一些數據並將這些數據保存在本地數據庫中。我還需要從我的應用程序資源中保存資源ID,以顯示正確本地化的在線源的數據。資源ID - 保存以將它們保存在數據庫中

是否保存資源ID在我的數據庫?我不確定是否清理項目或新建會確保ID不會改變...

是否有替代解決方案?保存資源名稱是一種替代方法,只要我不更改資源名稱......可能是更好的方法?

+0

您可以檢查http://stackoverflow.com/questions/24837083/does-resource-id-changes-everytime-an-application-starts。 如果有幫助。 –

回答

2

使用資源ID不安全。無論您何時添加或刪除資源,所有其他ID都可能發生變化。

正如你所提到的,命名約定是一個更好的方法。你可以得到一個給定名字的資源的ID,但你不應該期待太多的表現。

另一方面,我會嘗試使用另一種方式。例如;我有一個資源和一個與之配對的在線數據。其中一個數據在線,另一個在本地保存。爲什麼不將它們都存儲在在線資源中?

希望它可以幫助你。

+0

我在未來使用Dropbox,Box,Drive等多種服務,我希望在我的應用中顯示所有可用的媒體元數據,當然本地化...這就是爲什麼我必須結合本地/在線資源...我無論如何,以爲是這樣,我認爲最好的做法是在資源狀態中做出重大評論,即不允許重命名這些資源並小心...... – prom85

0

我有另一種解決方案,而不是使用命名(字符串)或整數映射。我知道,我的解決方案基本上只是一小部分代碼和它的工作,但我做不同的主要原因是重構和更改。您希望編輯器告訴您資源是否缺失,以便您能夠做出反應。如果你還沒有綁定到文件名的變化等,它也會有很大的幫助。

據我所知,你需要從其他來源訪問本地圖像,那些不知道這些圖像。如果這是正確的,那麼最好使用某種自制的圖像ID。可以說你有資源aa.jpg和bb.png。這將轉化爲這樣的事情:

Map<String, Integer> map 
map.put("drawable_aa",R.drawable.aa); 
map.put("drawable_bb",R.drawable.bb); 

這使您現在可以查找哪些資源可能匹配。你不應該把它存儲在數據庫中,而是在啓動時在應用程序的某個地方構建這個查找表(應用程序,單例,注入的東西,但是你這樣做)。 這將使你現在有像重構,其中aa.jpg的名稱可以更改爲cc.jpg變化,並會匹配:

map.put("drawable_aa", R.drawable.cc); 

,因此,即使沒有破壞任何東西。它也允許你在任何你想要的地方都有免費的映射,只需在這裏改變一下。 抱怨,如果有東西丟失,它也會抱怨。

有一點需要注意 - 做一些getter函數而不是直接訪問map,它會檢查元素是否存在。如果您返回int,那麼您需要擁有一些資源集,並且通常更簡單的代碼,如果您不必檢查資源是否存在,則它仍然可以工作 - 例如,使用「missing_resource.jpg」那是作爲資源返回的,如果它丟失的話。這種方式很容易看到。當然你仍然可以做一些檢查和隱藏的東西,但正如所說的那樣,那麼你每次都必須這樣做,而這並不總是可行的。

希望幫助

+0

這與覆蓋資源ID表的邏輯相同每次你打開你的應用程序。由於Map已經跳轉到了對象的地址,所以它應該具有更好的性能。 –

+0

http://stackoverflow.com/a/19093475/2886507也許這是一個更清晰的解決方案,因爲沒有找到資源返回「-1」 –

+0

如果你不能控制你的資源名稱,這可能是一個需要考慮的事情,實際上我沒有看到維護這張地圖與維護正確的資源名稱相比有很大的區別... – prom85