Android getResources () из не-класса деятельности - PullRequest
3 голосов
/ 11 декабря 2011

Я пытаюсь загрузить свой массив вершин из assets / model.txt У меня есть классы OpenGLActivity, GLRenderer и Mymodel я добавил эту строку в OpenGLActivity:

public static Context context;

И это для класса Mymodel:

Context context = OpenGLActivity.context;
    AssetManager am = context.getResources().getAssets();
    InputStream is = null;
    try {
        is = am.open("model.txt");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Scanner s = new Scanner(is);
    long numfloats = s.nextLong();
    float[] vertices = new float[(int) numfloats];
    for (int ctr = 0; ctr < vertices.length; ctr++) {
        vertices[ctr] = s.nextFloat();
    }

Но это не работает (

1 Ответ

6 голосов
/ 11 декабря 2011

Я обнаружил, что в Android очень важно, чтобы Activity (и большинство других классов) не имели ссылок на них в статических переменных.Я стараюсь избегать их любой ценой, они любят вызывать утечки памяти.Но есть одно исключение, ссылка на объект приложения, который, конечно, Context.Удержание ссылки в статическом виде на это никогда не приведет к утечке памяти.

Итак, что мне делать, если мне действительно нужен глобальный контекст для ресурсов, это расширить объект Application и добавить статическую функцию get для контекста.

In the manifest do....
<application    android:name="MyApplicationClass" ...your other bits....>

А на Яве ....

public class MyApplicationClass extends Application
{
   private Context appContext;

    @Override
    public void onCreate()
    {//Always called before anything else in the app
     //so in the rest of your code safe to call MyApplicationClass.getContext();
         super.onCreate();
         appContext = this;
    }

    public static Context getContext()
    {
         return appContext;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...