Использование getIdentifier() для поиска идентификатора изображения

Я пытаюсь получить идентификатор изображения с помощью следующего кода.

 public class MovieActivity extends ActionBarActivity {
        private Context con;
        String name = "test";
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                con = MovieActivity.this;
                setContentView(R.layout.activity_movie);
            }

    public void updateScreen(){

            int imageResource = con.getResources().getIdentifier("drawable/" + name , null, con.getPackageName());

        }

    }

Когда я запускаю его, я получаю исключение:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

Я думал, что проблема была Context поэтому я добавил con переменная, которая получает контекст при запуске кода. Я провел некоторые исследования и попробовал другие методы, но каждый раз получал одно и то же исключение. Может кто-нибудь мне помочь?

РЕДАКТИРОВАТЬ: Когда я использую ту же строку кода в MainActivity, он работает отлично. Но в другом классе это терпит неудачу.

public class SomeMovie extends MovieActivity {  }

public class MainActivity extends ActionBarActivity {

     protected void onCreate(Bundle savedInstanceState) {
          SomeMovie movie = new SomeMovie();
          movie.updateScreen();

      }
 }

SomeMovie класс является потомком MovieActivity учебный класс. Я называю метод на этом. Я отладил код и заметил, что Context является нулевым, когда код попадает в updateScreen() метод. Правильно ли использовать наследование на занятиях?

1 ответ

Решение

+ Изменить

int imageResource = con.getResources().getIdentifier("drawable/" + name , null, con.getPackageName());

в

int imageResource = getResources().getIdentifier("drawable/" + name , null, con.getPackageName());

Вы уже в Activityконтекст, так что используйте его. (Не нужно использовать this ключевое слово для ссылки на него)

РЕДАКТИРОВАТЬ:

Вы не определяете макет для SomeMovie Активность, поэтому его context всегда null, Вы должны определить макет деятельности в его onCreate метод:

public class SomeMovie extends MovieActivity {

     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.somemoviexml);
          ...

      }
 }
Другие вопросы по тегам