вызвать getString (R.strings ....) из класса? - PullRequest
12 голосов
/ 17 сентября 2011

Есть ли способ использовать метод getString из отдельного класса?

У меня есть строка, хранящаяся в моих строках xml, я хотел бы использовать эту строку в объекте ... но метод даже не доступен в объекте ...

какие-нибудь советы?

Ответы [ 7 ]

12 голосов
/ 17 сентября 2011

getString() - метод класса Context. Если вам это нужно внутри отдельного класса (который не расширяет Context), обычно лучше предоставить его в качестве отдельного аргумента нужному методу.

Пример:

public void logString(Context c, int stringId) {
    Log.d("TAG", c.getString(stringId));
}

Важно одно: Никогда не хранит контекст внутри отдельного класса.
Предоставьте аргумент. В противном случае вы потеряете память и нарушите весь жизненный цикл Android, если объект, в котором хранится контекст, живет дольше, чем объект, которому изначально принадлежит контекст (например, действие).

¹ getString() также можно использовать из класса Resources - который вы можете получить через Context.getResources()

8 голосов
/ 24 июля 2014

решение здесь - убедиться, что ваш объект имеет ссылку на контекст приложения

Class Swag{
    private Context ctx;
    public Swag(Context ctx){
       this.ctx = ctx;
    }
    public void doSomething(){
        String something = ctx.getResources().getString(R.string.somestring);
        ...
    }
    // or like this
    public void makeUpperCase(Context appContext){
        appContext.getResources().getString(R.string.super_string_swag_yolo);
    }
}

очевидно, вы должны указать контекст при создании объекта или при вызове метода

7 голосов
/ 02 июля 2015

файл ресурсов: values ​​/ strings.xml

<resources>
   <string name="app_name">App name</string>
<resources>

Java

import android.content.res.Resources;
Resources.getSystem().getString(R.string.app_name);//result : App name
1 голос
/ 14 августа 2012

редактировать: ниже не будет работать.Я прочитал это на другом сайте и предположил, что это работает, но я только попробовал это в своем приложении и продолжал получать ошибку.Проблема в том, что он скомпилируется, но вы получите исключение времени выполнения.

Это будет работать с любым классом Java:

import android.content.res.Resources

Resources.getSystem().getString(R.string.blah);
0 голосов
/ 17 апреля 2018

Это работает, но только для системных ресурсов:

import android.content.res.Resources
Resources.getSystem().getString(R.string.blah);

Ссылка: https://stackoverflow.com/a/40917607/8994882

0 голосов
/ 20 июня 2016

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

пример:

public class StaticData {
    public static String BASE_URL = "https://stackoverflowrocks.com";
}

и получите эту строку из вашего другого класса, вызвав напрямую StaticData.BASE_URL

красиво и чисто.

0 голосов
/ 17 сентября 2011

Попробуйте это в своем Java-файле:

String myString = getResources().getString(R.string.MY_STRING)

Теперь используйте этот строковый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...