我试图通过使用以下代码来获取图像的ID。
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()
为空。在活动类上使用继承是错误的吗?
答案 0 :(得分: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);
...
}
}