Android: How do you access a string-array from strings.xml in a custom class?-ThrowExceptions

Exception or error:

I’d like to get my string-array without extending Activity in my custom class. Is there a way to do this?

String[] foo_array = getResources().getStringArray(R.array.foo_array); will not work without extending Activity, so I need a work-around.

How to solve:

Pass the context to the constructor of custom class and use the same

new CustomClass(ActivityName.this);

Then

Context mContext;
public CustomClass(Context context)
{
    mContext = context;
}

use the context

String[] foo_array = mContext.getResources().getStringArray(R.array.foo_array);

Also keep in mind

Do not keep long-lived references to a context-activity (a reference to an activity should have the same life cycle as the activity itself)

http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html

Also check this

android getResources() from non-Activity class

Edit:

Change this

public class CustomClass(Context context) 
{
}

To

public class CustomClass
{
   Context mContext;
   public CustomClass(Context context) // constructor 
   {
    mContext = context;
   }
}

###

try this,

Context context=getApplicationContext();
String[] foo_array = context.getResources().getStringArray(R.array.foo_array);

And, do not use Activity Context as that is tied to the Activity life cycle.

Update,

getApplicationContext() is from Context class. That means any thing extended Context have this method. This also means you will be able to use this from service or from other resources.

But, if you custom class do not extend Activity/context, you have to pass Context as parameter to use getApplicationContext()

if you declare your activity like this

myMethod(Activity activity) //this is bad

Bud if it is like following,

myMethod(Context context) //this is ok

but from above declaration do not pass Activity or Service Context as they have own life cycle. instead you will use getApplicationContext()

###

You need pass the Activity context to the Custom class.

private Context context;
public CustomClass(Context context)
{
 this.context=context;
}

###

if you use numberpicker and pass String from sring xml then use this

np_Basic_Hight.setMinValue(0);

    np_Basic_Hight.setMaxValue(71);
    np_Basic_Hight.setDisplayedValues(getContext().getResources().getStringArray(R.array.hieght));

Leave a Reply

Your email address will not be published. Required fields are marked *