【问题标题】:Is it possible to create string.xml file programmatically in android?是否可以在 android 中以编程方式创建 string.xml 文件?
【发布时间】:2021-12-05 04:50:04
【问题描述】:

如何在android studio项目的资源文件中以编程方式创建string.xml文件

例如

"languageKeys": [
        {
            "key": "welcome_screen_title",
            "value": "ZervBee"
        },
        {
            "key": "skip_button",
            "value": "தவிர்"
        },
        {
            "key": "walkthrough_title_1",
            "value": "மேசையிலிருந்து ஆர்டர்"
        },
        {
            "key": "walkthrough_title_2",
            "value": "ஆன்லைனில் பணம் செலுத்துங்கள்"
        },
        {
            "key": "walkthrough_title_3",
            "value": "வரிசைகளை தவிர்க்கவும்"
        },
        {
            "key": "walkthrough_desc_1",
            "value": "இப்போது நீங்கள் உங்கள் மேஜையில் இருந்து உணவை ஆர்டர் செய்யலாம்"
        },
        {
            "key": "walkthrough_desc_2",
            "value": "மாற்றத்தைப் பற்றி ஒருபோதும் கவலைப்பட வேண்டாம், ஆர்டர் செய்யும் போது சரியான தொகையை செலுத்துங்கள்"
        },
        {
            "key": "walkthrough_desc_3",
            "value": "வரிசையில் நிற்பதைத் தவிர்க்கவும், உங்கள் ஆர்டர் தயாராக இருக்கும்போது நாங்கள் அறிவிப்போம்"
        },
        {
            "key": "choose_langauge_title",
            "value": "மொழியை தேர்வு செய்யவும்"
        },
        {
            "key": "my_cart",
            "value": "என் வண்டி"
        }
    ] 

这是来自 API 的响应,采用 JSON 格式。我将响应转换为 xml 格式。 如何将该 xml 文件保存为资源中的字符串 file.xml。他们有什么方法可以转换它。

提前致谢

【问题讨论】:

  • 您能否编辑您的问题以准确说明您要在这里实现的目标?示例会很有帮助。

标签: android xml string android-resources jsonresponse


【解决方案1】:

string.xml 文件是资源文件。与任何其他资源文件一样,这些文件不能在运行时修改。更准确地说,res 文件夹中的任何文件都不能在运行时修改,例如。 string.xmldrawablesvalues.xml

理想情况下,您可以解析您的回复并将其存储在SharedPrefernce 中,或者使用Rooom 设置local db

【讨论】:

    【解决方案2】:

    资源文件在构建时使用(单向/只读使用)。你误解了他们的目的。

    您可以使用 GSON 等将 JSON 响应加载(反序列化)到 Java 对象中。

    为反序列化准备 LanguageKey 类:

    public class LanguageKey {
        public final String key;
        public final String value;
    
        public LanguageKey(String key, String value) {
            this.key = key;
            this.value = value;
        }
    }
    

    一个示例 MainActivity:

    public class MainActivity extends AppCompatActivity {
        private static final String JSON = "[" +
                "{" +
                "\"key\": \"welcome_screen_title\"," +
                "\"value\": \"ZervBee\"" +
                "}," +
                "{" +
                "\"key\": \"skip_button\"," +
                "\"value\": \"தவிர்\"" +
                "}" +
                "]";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // deserialize using GSON
            List<LanguageKey> languageKeys = new Gson().fromJson(
                JSON, new TypeToken<List<LanguageKey>>(){}.getType()
            );
    
            // Now, you can use languageKeys object directly
    
            for (LanguageKey languageKey: languageKeys) {
                Log.d("LanguageKey", String.format(
                    "key: %s; value: %s",
                    languageKey.key, languageKey.value
                ));
            }
        }
    }
    

    注意:您的 JSON 无效。您可能需要在处理之前删除"languageKeys":

    【讨论】:

    • 感谢您回答我的问题。我动态使用字符串文件的目标取决于 json 响应。无需手动更改字符串值。他们是任何方式或任何其他替代选项
    • @SumanRadhakrishnan 其他方法之一是反序列化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多