使用getIdentifier()查找Image的ID

时间:2015-11-24 19:51:37

标签: java android android-resources

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

1 个答案:

答案 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);
          ...

      }
 }