I have written the line:
String Mess = R.string.mess_1 ;
to get string value, but instead of returning string, it is giving me id of type integer. How can I get its string value? I mentioned the string value in the string.xml file.
Try this
String mess = getResources().getString(R.string.mess_1);
UPDATE
String string = getString(R.string.hello);
You can use either getString(int) or getText(int) to retrieve a string. getText(int) will retain any rich text styling applied to the string.
Reference: https://developer.android.com/guide/topics/resources/string-resource.html
this.getString(R.string.some_id) if you're already in a Context (Activity or Service).getResouces().getInteger(R.integer.my_value_in_xml)In Activity:
this.getString(R.string.resource_name)
If not in activity but have access to context:
context.getString(R.string.resource_name)
application.getString(R.string.resource_name)
this while you are in Activity. Simply getString() will let you do things.I'm using this:
String URL = Resources.getSystem().getString(R.string.mess_1);
Resources.getSystem() does not give you the application resources, but only android's. It should not be used for resources like string. I used this solution and the application crashed, throwing a notfoundexception that was hard to understand (as the resource exists in strings.xml).By the way, it is also possible to create string arrays in the strings.xml like so:
<string-array name="tabs_names">
<item>My Tab 1</item>
<item>My Tab 2</item>
</string-array>
And then from your Activity you can get the reference like so:
String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"
Only for future references.
In the String resources documentation it says:
You can use either getString(int) or getText(int) to retrieve a string. getText(int) will >retain any rich text styling applied to the string.
Get link to the context of you application
class MY_APPLICATION_NAME: Application() {
companion object {
private lateinit var instance: MY_APPLICATION_NAME
fun getAppContext(): Context = instance.applicationContext
}
override fun onCreate() {
instance = this
super.onCreate()
}
}
inline fun Int.toLocalizedString(): String = MY_APPLICATION_NAME.getAppContext().resources.getString(this)
strings.xml
<resources>
<!-- ....... -->
<string name="no_internet_connection">No internet connection</string>
<!-- ....... -->
</resources>
Get string value:
val errorMessage = R.string.no_internet_connection.toLocalizedString()
You can read directly the value defined into strings.xml:
<resources>
<string name="hello">Hello StackOverflow!</string>
</resources>
and set into a variable:
String mymessage = getString(R.string.hello);
but we can define the string into the view:
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"/>
while u write R. you are referring to the R.java class created by eclipse, use getResources().getString() and pass the id of the resource from which you are trying to read inside the getString() method.
Example : String[] yourStringArray = getResources().getStringArray(R.array.Your_array);
Update
getString(R.string.some_string_id) in both Activity or Fragment.Context.getString(R.string.some_string_id) where you don't have direct access to getString() method. Like Dialog.Problem is where you don't have Context access, like a method in your Util class.
Assume below method without Context.
public void someMethod(){
...
// can't use getResource() or getString() without Context.
}
Now you will pass Context as a parameter in this method and use getString().
public void someMethod(Context context){
...
context.getString(R.string.some_id);
}
What i do is
public void someMethod(){
...
App.getRes().getString(R.string.some_id)
}
What? It is very simple to use anywhere in your app!
So here is a Bonus unique solution by which you can access resources from anywhere like Util class .
import android.app.Application;
import android.content.res.Resources;
public class App extends Application {
private static App mInstance;
private static Resources res;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
res = getResources();
}
public static App getInstance() {
return mInstance;
}
public static Resources getResourses() {
return res;
}
}
Add name field to your manifest.xml <application tag.
<application
android:name=".App"
...
>
...
</application>
Now you are good to go.