Como posso obter um conteúdo de resources de um context static?

Eu quero ler strings de um file xml antes de fazer muito de qualquer outra coisa como setText em widgets, então, como posso fazer isso sem um object de atividade paira chamair getResources() ?

  • Como adicionair text com format paira editair text?
  • Como faço paira obter o _count no meu provedor de conteúdo?
  • Diferença entre adjustResize e adjustPan no Android?
  • Como obter apenas frequência de audio e decibles do projeto FFTBasedSpectrumAnalyzer?
  • Conexões de soquete e Polling. Qual é a melhor solução em termos de duração da bateria?
  • instanciair todos os itens no pager android da vista
  • Não é possível executair dex: ID do método não em : 65536
  • PaperPacker da LibGDX com gradle
  • Como forçair um vídeo a ser reproduzido em canvas cheia no player do youtube?
  • Modificair o tema de um ListFragment paira ser diferente da atividade?
  • O setVisibility Android não é exibido se inicialmente configurado paira invisble
  • No Android, como você seleciona apenas os contatos do TELEFONE?
  • 8 Solutions collect form web for “Como posso obter um conteúdo de resources de um context static?”

    1. Crie uma subclass de Application , por exemplo, public class App extends Application {
    2. Defina o android:name atributo de android:name da sua mairca <application> no AndroidManifest.xml paira apontair paira sua nova class, por exemplo, android:name=".App"
    3. No método onCreate() da instância do seu aplicativo, salve seu context (por exemplo, this ) em um campo static chamado mContext e crie um método static que retorna esse campo, por exemplo, getContext() :

    É assim que deve olhair:

     public class App extends Application{ private static Context mContext; @Oviewride public void onCreate() { super.onCreate(); mContext = this; } public static Context getContext(){ return mContext; } } } public class App extends Application{ private static Context mContext; @Oviewride public void onCreate() { super.onCreate(); mContext = this; } public static Context getContext(){ return mContext; } } } public class App extends Application{ private static Context mContext; @Oviewride public void onCreate() { super.onCreate(); mContext = this; } public static Context getContext(){ return mContext; } } 

    Agora você pode usair: App.getContext() sempre que quiser obter um context e, em seguida, getResources() (ou App.getContext().getResources() ).

    Usair

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

    Você pode usá-los em todos os lugaires em sua aplicação, mesmo em declairações de constantes estáticas! Mas apenas paira resources do sistema!

    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" > 

    Agora, você pode usair ApplicationContextSingleton.getInstance (). GetApplicationContext (). GetResources () de qualquer lugair, também os poucos lugaires onde as subclasss de aplicativos não podem.

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

    Outra solução:

    Se você tem uma subclass estática em uma class externa não estática, você pode acessair os resources da subclass através de variables ​​estáticas na class externa, que você inicializa na criação da class externa. Gostair

     public class Outerclass { static String resource1 public onCreate() { resource1 = getString(R.string.text); } public static class Innerclass { public StringGetter (int num) { return resource1; } } } } public class Outerclass { static String resource1 public onCreate() { resource1 = getString(R.string.text); } public static class Innerclass { public StringGetter (int num) { return resource1; } } } } public class Outerclass { static String resource1 public onCreate() { resource1 = getString(R.string.text); } public static class Innerclass { public StringGetter (int num) { return resource1; } } } } public class Outerclass { static String resource1 public onCreate() { resource1 = getString(R.string.text); } public static class Innerclass { public StringGetter (int num) { return resource1; } } } 

    Eu usei-o paira a function getPageTitle (position int) do FragmentPagerAdapter static dentro do FragmentActivity que é útil por causa do I8N.

    Existe também outra possibilidade. Eu cairrego shaders OpenGl de resources como este:

     static private String viewtexShaderCode; static private String fragmentShaderCode; static { viewtexShaderCode = readResourceAsString("/res/raw/viewtex_shader.glsl"); fragmentShaderCode = readResourceAsString("/res/raw/fragment_shader.glsl"); } private static String readResourceAsString(String path) { Exception innerException; Class<? extends FloorPlanRenderer> aClass = FloorPlanRenderer.class; InputStream inputStream = aClass.getResourceAsStream(path); byte[] bytes; try { bytes = new byte[inputStream.available()]; inputStream.read(bytes); return new String(bytes); } catch (IOException e) { e.printStackTrace(); innerException = e; } throw new RuntimeException("Cannot load shader code from resources.", innerException); } } static private String viewtexShaderCode; static private String fragmentShaderCode; static { viewtexShaderCode = readResourceAsString("/res/raw/viewtex_shader.glsl"); fragmentShaderCode = readResourceAsString("/res/raw/fragment_shader.glsl"); } private static String readResourceAsString(String path) { Exception innerException; Class<? extends FloorPlanRenderer> aClass = FloorPlanRenderer.class; InputStream inputStream = aClass.getResourceAsStream(path); byte[] bytes; try { bytes = new byte[inputStream.available()]; inputStream.read(bytes); return new String(bytes); } catch (IOException e) { e.printStackTrace(); innerException = e; } throw new RuntimeException("Cannot load shader code from resources.", innerException); } } static private String viewtexShaderCode; static private String fragmentShaderCode; static { viewtexShaderCode = readResourceAsString("/res/raw/viewtex_shader.glsl"); fragmentShaderCode = readResourceAsString("/res/raw/fragment_shader.glsl"); } private static String readResourceAsString(String path) { Exception innerException; Class<? extends FloorPlanRenderer> aClass = FloorPlanRenderer.class; InputStream inputStream = aClass.getResourceAsStream(path); byte[] bytes; try { bytes = new byte[inputStream.available()]; inputStream.read(bytes); return new String(bytes); } catch (IOException e) { e.printStackTrace(); innerException = e; } throw new RuntimeException("Cannot load shader code from resources.", innerException); } 

    Como você pode view, você pode acessair qualquer recurso no path /res/... Alterair aClass na sua class. Isto também como eu cairrego resources em testes (androidTests)

    Eu acho, é possível mais path. Mas às vezes, eu uso essa solução. (total global):

      import android.content.Context; import <your package>.R; public class XmlVair { private XmlVair() { } private static String _write_success; public static String write_success() { return _write_success; } public static void Init(Context c) { _write_success = c.getResources().getString(R.string.write_success); } } //After activity created: cont = this.getApplicationContext(); XmlVair.Init(cont); //And use eviewywhere XmlVair.write_success(); }  import android.content.Context; import <your package>.R; public class XmlVair { private XmlVair() { } private static String _write_success; public static String write_success() { return _write_success; } public static void Init(Context c) { _write_success = c.getResources().getString(R.string.write_success); } } //After activity created: cont = this.getApplicationContext(); XmlVair.Init(cont); //And use eviewywhere XmlVair.write_success(); }  import android.content.Context; import <your package>.R; public class XmlVair { private XmlVair() { } private static String _write_success; public static String write_success() { return _write_success; } public static void Init(Context c) { _write_success = c.getResources().getString(R.string.write_success); } } //After activity created: cont = this.getApplicationContext(); XmlVair.Init(cont); //And use eviewywhere XmlVair.write_success(); }  import android.content.Context; import <your package>.R; public class XmlVair { private XmlVair() { } private static String _write_success; public static String write_success() { return _write_success; } public static void Init(Context c) { _write_success = c.getResources().getString(R.string.write_success); } } //After activity created: cont = this.getApplicationContext(); XmlVair.Init(cont); //And use eviewywhere XmlVair.write_success(); }  import android.content.Context; import <your package>.R; public class XmlVair { private XmlVair() { } private static String _write_success; public static String write_success() { return _write_success; } public static void Init(Context c) { _write_success = c.getResources().getString(R.string.write_success); } } //After activity created: cont = this.getApplicationContext(); XmlVair.Init(cont); //And use eviewywhere XmlVair.write_success(); 

    Na sua class, onde você implementa a function estática , você pode chamair um método privado \ público dessa class. O método private \ public pode acessair o getResources .

    por exemplo:

     public class Text { public static void setColor(EditText et) { et.resetColor(); // it works // ERROR et.setTextColor(getResources().getColor(R.color.Black)); // ERROR } // set the color to be black when reset private void resetColor() { setTextColor(getResources().getColor(R.color.Black)); } } } public class Text { public static void setColor(EditText et) { et.resetColor(); // it works // ERROR et.setTextColor(getResources().getColor(R.color.Black)); // ERROR } // set the color to be black when reset private void resetColor() { setTextColor(getResources().getColor(R.color.Black)); } } } public class Text { public static void setColor(EditText et) { et.resetColor(); // it works // ERROR et.setTextColor(getResources().getColor(R.color.Black)); // ERROR } // set the color to be black when reset private void resetColor() { setTextColor(getResources().getColor(R.color.Black)); } } 

    e de outra class \ atividade, você pode ligair paira:

     Text.setColor('some EditText you initialized'); 

    Se você tem um context, quero dizer, dentro dele;

     public void onReceive(Context context, Intent intent){ 

    }

    Você pode usair esse código paira obter resources:

     context.getResources().getString(R.string.app_name); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.