63 votes

Eclipse / Java - Valeurs dans R.string. * Return int?

Je pensais que je serais chic et que j'utiliserais le fichier string.xml pour définir des chaînes constantes, par exemple pour les messages d'exception. Dans strings.xml, j'ai cliqué sur Ajouter, choisi l'option "Chaîne" (et non "Chaîne de chaînes"), puis lui ai attribué un nom et une valeur. J'ai été surpris de voir que ce code ne fonctionne pas:

 throw new Exception(R.string.MyExceptionMessage);
 

Et cela échoue parce que R.string.MyExceptionMessage est en fait de type int. Je peux vérifier ce type en regardant dans R.java. Qu'est-ce que je rate?

115voto

Christopher Orr Points 58514

Tout dans l' R classe est une référence, c'est simplement défini comme un int.

Si votre code est en cours d'exécution à l'intérieur — ou a accès à un Androïde Context, vous pouvez appeler context.getString(R.string.my_exception_message) pour obtenir le réel String de la valeur.

Ou, pour des choses comme l'exception des chaînes qui ne nécessitent pas d'être traduit et donc n'avez absolument pas besoin d'être définie dans un Android de ressources .fichier xml, vous pouvez stocker des chaînes de caractères comme des constantes dans une sorte de StringConstants interface. De cette façon, vous pouvez vous référer à la les chaînes à partir de l'intérieur de l'utilitaire de classes qui n'ont pas accès à l' Context.

32voto

skidadon Points 155

Utilisez la méthode "getResources (). GetString (id)".

   getResources().getString(R.string.title_activity)
 

Et boum, vous avez votre ficelle. Assurez-vous de stocker cette chaîne dans votre fichier string.xml dans le dossier de valeurs.

5voto

PinoSan Points 658

Chris est à droite. Mais que faire si vous voulez localiser Exception d'une chaîne trop. Par exemple, vous jetez une Exception et quand vous l'attraper vous souhaitez afficher le message d'exception à l'utilisateur. Je voudrais les mettre dans strings.xml mais en même temps je ne veux pas utiliser ce code

throw new Exception(context.getString(R.string.my_exception_message))

parce que je pense que si vous avez une Exception, probablement, vous ne voulez pas et vous ne pouvez pas utiliser un certain code supplémentaire pour obtenir le message d'exception.

Je pense que la seule solution serait de déclarer une Chaîne statique pour ce message dans votre Activité principale et l'initialiser dès que possible (par exemple dans le onCreate () (méthode) comme ceci:

private static String my_exception_message;

public onCreate()
{
    my_exception_message = context.getString(R.string.my_exception_message);
}

Alors, quand vous jetez à l'exception que vous avez votre message localisé prêt à l'utiliser. Ce que vous en pensez? Vous pouvez penser à d'autres solutions?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X