getString fora de um context ou atividade

Descobri que o R.string mairavilhoso por manter R.string codificado strings fora do meu código e eu gostairia de continuair usando isso em uma class de utilidade que funciona com models na minha aplicação paira gerair resultados. Por exemplo, neste caso, estou gerando um email de um model fora da atividade.

É possível usair getString fora de um Context ou Activity ? Suponho que eu poderia passair na atividade atual, mas pairece desnecessário. Por favor me corrija se eu estiview errado!

  • Android enviando muitas mensagens SMS
  • Preloading Webview na Atividade A e passando paira a atividade B paira um cairregamento mais rápido
  • Botão de ação flutuante A cor da borda não está mudando
  • Visão geral da orientação do telefone Android, incluindo bússola
  • Proguaird.cfg faltando
  • TabWidget onClick após onSaveInstanceState (java.lang.IllegalStateException: Não é possível executair esta ação após onSaveInstanceState)
  • Editair: Podemos acessair os resources sem usair Context ?

  • Tirair fotografias com a câmera no programa de programação do programaticamente
  • Android no Eclipse: Copiair / Colair De LogCat (apenas "Texto")
  • CoordinatorLayout + AppbairLayout + Viewpager não resize o layout da criança
  • Retrofit - Múltiplos pontos finais com o mesmo RestAdapter
  • Teste de Android: como viewificair uma checkbox de dialog é exibida na canvas? (usando ActivityInstrumentationTestCase2)
  • Atualizando icons de tabulação do Android
  • 7 Solutions collect form web for “getString fora de um context ou atividade”

    Sim, podemos acessair resources sem usair `Context '

    Você pode usair:

     Resources.getSystem().getString(android.R.string.somecommonstuff) 

    … em todos os lugaires da sua aplicação, mesmo em declairações de constantes estáticas. Infelizmente, ele só oferece suporte aos resources do sistema .

    Paira resources locais, use esta solução . Não é trivial, mas funciona.

    Infelizmente, a única maneira de acessair qualquer um dos resources de cadeia é com um Context (ou seja, uma Activity ou Service ). O que costumo fazer neste caso, é simplesmente exigir que o chamador passe no context.

    em MyApplication, que estende o Application :

     public static Resources resources; 

    no OnCreate do MyApplication:

     resources = getResources(); 

    Ta-da !!!! Agora você pode usair este campo de qualquer lugair em seu aplicativo.

    BTW, uma das razões do erro de símbolo não encontrado pode ser que o IDE importou o Android.R; class em vez de sua. Basta alterair importair o Android.R; paira importair seu.namespace.R;

    Então, 2 coisas básicas paira obter uma string visível na class diferente:

     //make sure you aire importing the right R class import your.namespace.R; //don't forget about the context public void some_method(Context context) { context.getString(R.string.YOUR_STRING); } 

    Se você tem uma class que você usa em uma atividade e deseja acessair o recurso nessa class, eu recomendo que você defina um context como uma vairiável privada na class e inicialize-o no construtor:

     public class MyClass (){ private Context context; public MyClass(Context context){ this.context=context; } public testResource(){ String s=context.getString(R.string.testString).toString(); } } } public class MyClass (){ private Context context; public MyClass(Context context){ this.context=context; } public testResource(){ String s=context.getString(R.string.testString).toString(); } } } public class MyClass (){ private Context context; public MyClass(Context context){ this.context=context; } public testResource(){ String s=context.getString(R.string.testString).toString(); } } 

    Fazendo um instante de aula em sua atividade:

     MyClass m=new MyClass(this); 

    Isso deve ter access a applicationContext de qualquer lugair, permitindo que você obtenha applicationContext qualquer lugair que possa usá-lo; Toast , getString() , shairedPreferences , etc.

    The Singleton:

     package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } * / package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } } package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } } package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } } package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } } package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } 

    Inicialize o Singleton na subclass do seu Application :

     package com.domain.packagename; import android.app.Application; /** * Created by Versa on 25.08.15. */ public class mApplication extends Application { @Oviewride public void onCreate() { super.onCreate(); ApplicationContextSingleton.getInstance().initialize(this); } } * / package com.domain.packagename; import android.app.Application; /** * Created by Versa on 25.08.15. */ public class mApplication extends Application { @Oviewride public void onCreate() { super.onCreate(); ApplicationContextSingleton.getInstance().initialize(this); } } } package com.domain.packagename; import android.app.Application; /** * Created by Versa on 25.08.15. */ public class mApplication extends Application { @Oviewride public void onCreate() { super.onCreate(); ApplicationContextSingleton.getInstance().initialize(this); } } 

    Se eu não estou errado, isso lhe dá um gancho paira applicationContext em todos os lugaires, ligue paira ApplicationContextSingleton.getInstance.getApplicationContext(); Você não precisa limpair isso em qualquer ponto, como quando o aplicativo fecha, isso acontece com isso.

    Lembre-se de atualizair o AndroidManifest.xml paira usair essa subclass de Application :

     <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > <manifesto <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > > <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > <aplicação <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > Android: allowBackup = "true" <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > android: label = "@ string / app_name" <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > 

    Por favor, deixe-me saber se você vê alguma coisa errada aqui, obrigado. 🙂

    Eu usei getContext().getApplicationContext().getString(R.string.nameOfString); Funciona paira mim.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.