从数据库获取Android字符串资源

3
我正在寻找一种替代方案,将字符串资源(strings.xml)替换为SQLite表的内容。该表的内容在与在线数据库同步时会发生变化。因此,当我在服务器上修改某些文本时,应用程序中的文本也应相应更改。
我不想逐个设置每个textview和其他文本,或者创建自定义textview等。
是否有可能从该数据库表生成xml并将其用作字符串资源? (当然是在运行时,并且生成的xml与原始xml完全相同,除了字符串值外,因此键不会更改) 还是有人有解决这个问题的想法吗?

不可能的。除非,当然,如果您的应用程序反编译自身>使用新值覆盖strings.xml>重新编译并将其复制到/data/app/,然后强制重新启动目标。 - ozbek
好的,那只是我的一个想法,但还有其他任何方法吗? - possenH4lt3r
1个回答

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

然后你可以像这样在文本视图中使用它

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

通过这种方式,您可以更新数据库的值并立即显示出来。在更新数据库值时,请不要忘记清除dbCache。显然,这个解决方案需要注意的是,数据库访问速度较慢。

希望能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接