2016-02-18 2 views
0

У меня есть все мои текстовые имена/метки, определенные в strings.xml.Доступ к строкам ресурсов из класса без активности

Я нахожу, что R.string. возвращает идентификационный номер строки. Как мне получить его, чтобы вернуть фактическую строку?

public class ResultsFileFormat{   

    public void getAllMeasData(){ 

     System.out.println(" *** STRING ****" + (R.string.date)); 

     // File text format 
     System.out.println(
     R.string.file_name + fileName + "\n" + 
     R.string.date + date + "\n\n" + 
     R.string.cal_table_sn + calTableSn + "\n" + 
     R.string.cal_table_date + calDate + "\n" + 
     R.string.cal_temp + calTemp + " C" + "\n" + 
     R.string.ref_gauge + tableGaugeRef + "\n\n" + 
     R.string.gauge_val_min + gauge.minGauge + "  " + tableGaugeMin + " (C)" + "\n" + 
     R.string.gauge_val_max + gauge.maxGauge + "  " + tableGaugeMax + " (C)" + "\n" + 
     R.string.groove_val_min + groove.minGroove + "  " + tableGrooveMin + " (C)" + "\n" + 
     R.string.groove_val_max + groove.maxGroove + "  " + tableGrooveMax + " (C)" + "\n" + 
     R.string.xl_min_pos + crossLevelPos.xlPosLow + "  " + xlLow + " (C)" + "\n" + 
     R.string.xl_max_pos + crossLevelPos.xlPosHigh + "  " + xlHigh + " (C)" + "\n" + 
     R.string.xl_min_neg + crossLevelNeg.xlNegLow + "  " + xlLow + " (C)" + "\n" + 
     R.string.xl_max_neg + crossLevelNeg.xlNegHigh + "  " + xlHigh + " (C)" + "\n"); 

    }   
} 

ответ

0

R.string.file_name даст вам ссылку на идентификатор этого элемента в файле R.java. Если вы хотите получить фактическую строку, вам нужно позвонить следующим образом: context.getResources().getString(R.string.file_name);. Поскольку вы вызываете из класса, который не extends Activity, вам придется передать контекст или получить контекст приложения. Передайте контекст с помощью конструктора. Таким образом, будет выглядеть последний код.

private Context context = null; 
public ResultsFileFormat(Context context){ 
    this.context = context; 
} 

и для получения ресурса,

String fileName = context.getResources().getString(R.string.file_name);

я не запускаю этот код, пожалуйста, попробуйте и дайте мне знать.

+0

Спасибо, ваш комментарий Bhavesth. Когда я попробую ваше предложение, «getString» не распознается и подсвечивается красным – John

+0

Пожалуйста, разместите здесь свой код, чтобы я мог проверить – Vishnu

+0

. Это хорошо ... «ResultsFileFormat» теперь не показывает ошибок. Если я хочу вызвать эту функцию из let say main activity, как передать контекст функции? .. немного покончить с концепцией контекста ... нужно прочитать об этом. – John

0

Вы можете использовать метод getResource который принадлежит контекст класса

Строка файла = GetResources() GetString (R.string.file_name).

System.out.println (имя файла);

0

Вам понадобится экземпляр Context, с помощью которого вы можете позвонить по телефону getResources().getString(R.string.<name>).

Используйте либо

Context context=getApplicationContext(); 
context.getResources().getString(R.string.<name>) 

Или пройти Context экземпляра или активность экземпляра (getActivity() или this) для вашего конструктора класса Java и использовать его для вызова GetResources() метод.

-1

Вы можете использовать Контекст приложения для этой цели. Вы должны расширить класс приложений, как показано ниже

общественного класса ApplicationEx расширяет применение {

public static ApplicationEx appContext; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    appContext = this; 

} 

}

Зарегистрируйте свой класс приложений в Application теге вашего файла манифеста, как показано ниже

Затем в файле вы хотите контекст, вы можете получить к нему доступ, как

ApplicationEx.appContext.getString (R.string.)

+0

* Вы должны расширить класс Application *, который является некоторым излишним, чтобы получить строку. Кроме того, все уже сказано 5 раз. Пожалуйста, проверьте существующие ответы перед публикацией –

+0

@TimCastelijns не уверен, почему вы думаете. Расширение класса приложения является излишним. Это одноэлементный класс и предоставляет контекст приложения, который должен использоваться для доступа к ресурсам. Это намного лучше, чем передать объект Activity в качестве контекста для доступа к строкам (в ваших словах просто строка). Это нормально, если вы не согласны с этим, но ответ на этот вопрос немного завышен. –

+0

Да, я не согласен, но нехорошо просто предположить, что это был я, который отклонил ваш ответ –

Смежные вопросы