Использование 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);
...
}
}