The method getString(int) is undefined for the type Apps

28.1k Views Asked by At

How do I fix this error. All the three strings on the bottom get the following error "the method getString(int) is undefined for the type Apps". Please help, im such a noob.

package com.actionbarsherlock.sample.fragments;

import android.content.Context;
import android.content.res.Resources;


public final class Apps {
/**
 * Our data, part 1.
 */
public static final String[] TITLES =
{
        "title1",
        "title2",
        "title3"
};

/**
 * Our data, part 2.
 */
public static final String[] DIALOGUE = { 

    getString(R.string.text1),

    getString(R.string.string2),

    getString(R.string.string3)

};
}
4

There are 4 best solutions below

2
On BEST ANSWER

First getString is not a static method, you are calling it in a static context this can't be done.

Second the getString method is part of the Resources class, your class does not extend the Resources class so the method can't be found.

I think parsing an instance of the Resources class to your Apps class using its constructor would be your the best option.

Something like this:

public final class Apps {

    public Apps(Resources r){
     DIALOGUE = new String[]{
        r.getString(R.string.text1),
        r.getString(R.string.string2),
        r.getString(R.string.string3)};
    }


/**
 * Our data, part 1.
 */
public static final String[] TITLES =
{
        "title1",
        "title2",
        "title3"
};

/**
 * Our data, part 2.
 */
public static String[] DIALOGUE;
}
1
On

pass a instance of Context context

and then use

context.getResources().getString(R.string.text1)

here context is belongs to your current activity.

0
On

Create a subclass of Application, for instance public class App extends Application { Set the android:name attribute of your tag in the AndroidManifest.xml to point to your new class, e.g. android:name=".App" In the onCreate() method of your app instance, save your context (e.g. this) to a static field named mContext and create a static method that returns this field, e.g. getContext():

This is how it should look:

public class App extends Application{

    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
    }

    public static Context getContext(){
        return mContext;
    }
}

Now you can use: App.getContext().getString()

0
On

you could try

getResources().getString(R.string.somestrid);

or

getApplicationContext().getResources().getString(R.string.somestrid);