2014-01-20 53 views
3

我正在寻找一种解决方法来替换SQLite表的内容的字符串资源(strings.xml)。该表的内容正在改变,并且在线数据库。所以,当我修改服务器上的一些文本时,它们应该在运行时也在应用程序中进行更改。来自数据库的Android字符串资源

我不想设定每一个TextView中的其它文本务实,或者创建自定义的TextView等

是否有可能从该数据库表生成XML并把它作为字符串资源? (当然运行时间和生成的XML将与原始完全相同,除了字符串值,所以键不会改变) 或者有没有人有想法解决这个问题?

+0

不可能。当然,除非你的应用反编译自己>用新值覆盖strings.xml>重新编译并将自身复制到'/ data/app /',然后强制重新启动目标。 – ozbek

+0

好吧,那只是我的一个想法,但其他任何方式呢? – possenH4lt3r

回答

0

无法即时更改strings.xml文件。你可以做的是抽象字符串聚集。

class YourUtilites { 

    static HashMap<String, String> dbCache = new HashMap<String, String>(); 
    public static String getString(Context context, String key, String defaultID) { 
     String value = null; 

     value = dbCache.get(key); 

     if (value == null) { 
      // Check if the key exists in the database 
      String value = db.somedbFunctionToGetString(key); 
      if (value != null) { 
       dbCache.put(key, value); 
      } 
     } 

     if (value == null) { 
      // If value is not in the database, resort to the default value 
      value = context.getResources().getString(defaultID); 
     } 

     return value; 
    } 
} 

然后你就可以在textviews使用这样

textView.setText(YourUtilities.getString("dbKey", R.id.defaultValue1, this); 
textView2.setText(YourUtilities.getString("dbKey2", R.id.defaultValue2, this); 
... 

这样你就可以更新你的分贝值,并将它立刻显示出来。当您更新数据库值时,不要忘记清除dbCache。这个解决方案显然不用说db访问速度慢,所以记住这一点。

希望这会有所帮助。