Android findViewById在更改compileSdkVersion和buildToolsVersion后返回null

时间:2015-09-30 21:09:03

标签: android nullpointerexception null findviewbyid

我已经搜索了我遇到的问题,但这是非常具体的,我无法找到答案。

我的应用中有以下代码:

class MainActivity extends Activity {
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
        mStatusImageView = (ImageView) findViewById(R.id.imageViewStatus);
        ...
        mStatusImageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
               ...
            }
    ...
    }

我最初编译和导出APK使用:

compileSdkVersion 21
buildToolsVersion "21.1.2"

一切正常。但后来我将我的应用更新到最新版本:

compileSdkVersion 23
buildToolsVersion "23.0.1"

现在出现了奇怪的部分。使用compileSdk和buildTools中的最新版本,如果我处于调试模式,一切运行正常。

但是如果我导出APK文件,在我的设备中安装后,当我运行我的应用程序时,我收到以下错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{x.x.x/x.x.x.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference : at x.x.x.MainActivity.onCreate(Unknown Source)

这是一个非常奇怪的问题......你们有没有想过为什么会这样?

1 个答案:

答案 0 :(得分:0)

您需要在setContentView()中调用onCreate()来设置用户界面,然后才能以编程方式与其任何组件进行交互。您的前两行onCreate()应该是super.onCreate(savedInstanceState),然后是setContentView(R.layout.your_layout)。然后继续设置onTouchListener。