2011-09-17 17 views
9

¿Hay alguna manera de utilizar el método getString de una clase separada?llamada getString (R.strings ....) de la clase?

He una cadena almacenada en mi xml cuerdas, me gustaría utilizar dicha cadena en un objeto ... pero el método no es aún disponibles en el objeto ...

algún consejo?

Respuesta

8

la solución aquí es asegurarse de que su objeto tiene una referencia al contexto de aplicación

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); 
    } 
} 

, obviamente, habría que suministrar el contexto al crear un objeto o al llamar al método

-3

Pruebe esto en su archivo Java:

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

Ahora utilizar este objeto cadena.

+0

getResources() es un método de clase de contexto. No puede usarlo sin una referencia de contexto válida –

+0

No puede usar getResources. Él ya ha explicado por qué. – Sotti

10

getString() es un método de la clase Context¹. Si lo necesita dentro de una clase separada (que no se extiende a Context), generalmente es mejor proporcionarlo como un argumento separado para el método que lo necesita.

Ejemplo:

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

Una cosa es importante:Nunca tienda el contexto dentro de la clase separada.
Proporcione un argumento. De lo contrario, perderá memoria e interrumpirá todo el ciclo de vida de Android si el objeto que almacena el contexto vive más tiempo que el objeto al que pertenece originalmente el contexto (por ejemplo, una actividad).

¹ getString() también se puede utilizar de la clase Resources - que se puede obtener a través de Context.getResources()

+0

gracias Terminé pasando el contexto al objeto porque podría expandirlo para usar más cadenas, así que no quiero pasar a muchos parámetros ya que el objeto obtiene sus datos de un servidor web ... – Mars

+0

Obteniendo datos de la web y el contexto de uso: dependiendo de cómo funcione tu clase, te sugiero que prefieras construir un ['Service'] (http://developer.android.com/reference/android/app/Service.html) (que se extiende Contexto). Esto funciona muy bien con el ciclo de vida de Android y proporciona lo que necesita. –

1

edición: La continuación no funcionará. Lo leí en otro sitio y asumí que funcionó, pero lo probé en mi aplicación y seguí recibiendo un error. El problema es que compilará pero obtendrá una excepción de tiempo de ejecución.

Esto funcionará de cualquier clase java:

import android.content.res.Resources 

Resources.getSystem().getString(R.string.blah); 
+1

Creo que quiere decir 'Lo siguiente NO funcionará' – TheMethod

+0

gracias por la actualización .. No puedo recordar por qué acepté su respuesta, pero esto definitivamente no funcionará ... – Mars

+0

estudio no puede encontrar el método getSystem() –

6

resouce file: 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 
+0

studio no puede encontrar el método getSystem() –

0

si no se puede pasar un contexto como parámetro, crear otra clase, donde poner todos sus datos estáticos.

ejemplo:

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

y conseguir que la cadena desde su otra clase llamando directamente StaticData.BASE_URL

agradable y limpio.

Cuestiones relacionadas