Возможно ли создать string.xml файл программно в Android?

#android #xml #string #android-resources #jsonresponse

Вопрос:

Как создать string.xml файл программно в файле ресурсов в проекте Android studio

например

 "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 в ресурсах. Есть ли у них какой-либо способ преобразовать его.

Заранее спасибо

Комментарии:

1. не могли бы вы, пожалуйста, отредактировать свой вопрос, чтобы точно указать, чего вы здесь пытаетесь достичь? Примеры были бы полезны.

Ответ №1:

Файл string.xml -это файл ресурсов. Как и любой другой файл ресурсов, эти файлы не могут быть изменены во время выполнения. Если быть более точным, любой файл в res папке не может быть изменен во время выполнения, например string.xml drawables , values.xml и т. Д.

В идеале вы можете проанализировать и сохранить свой ответ в a SharedPrefernce или, возможно, настроить local db использование Rooom .

Ответ №2:

Файлы ресурсов используются во время сборки (одностороннее использование / только для чтения). Вы неправильно понимаете их цель.

Вы можете просто загрузить (десериализовать) ответ JSON в объект Java с помощью GSON и т. Д.

Подготовьте класс LanguageKey для десериализации:

 public class LanguageKey {
    public final String key;
    public final String value;

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

Пример основной активности:

 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": его перед обработкой.

Комментарии:

1. Спасибо, что ответили на мой вопрос. Моя цель динамически использовать строковый файл зависит от ответа json. Нет необходимости изменять строковое значение вручную. Есть ли у них какой-либо способ или какие-либо другие альтернативные варианты

2. @Суманрадхакришнан Одним из других способов является десериализация.