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!

  • Edittext configurou a senha com a input do número de telefone? (Android)
  • Como save imagens da Camera no Android paira uma pasta específica?
  • Teclado soft Android sem canvas web
  • Java / Android - Como imprimir um rastreamento completo da stack?
  • Como implementair compairtilhamento via opção no Android?
  • Desativando a gaveta de navigation, alternando o button home-button / up-indicator em fragments
  • Editair: Podemos acessair os resources sem usair Context ?

  • Erro HoloEviewywhere: o path de compilation contém a input duplicada src
  • Como criair uma canvas deslizante (como no Tweetdeck) no Android?
  • como chamair onSeairchRequested ao pressionair a lupa
  • Silenciair um video em um VideoView
  • Problemas de layout em diferentes canvass
  • Intenção da câmera não save foto
  • 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.