【问题标题】:Android findViewById returning null after changing compileSdkVersion and buildToolsVersion更改 compileSdkVersion 和 buildToolsVersion 后,Android findViewById 返回 null
【发布时间】:2015-12-28 19:19:31
【问题描述】:

我已经搜索过我遇到的问题,但它非常具体,我找不到答案。

我的应用中有以下代码:

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)

这是一个非常奇怪的问题...你们知道为什么会这样吗?

【问题讨论】:

  • 清除项目并重新构建

标签: android nullpointerexception null findviewbyid


【解决方案1】:

在以编程方式与其任何组件交互之前,您必须在 onCreate() 中调用 setContentView() 来设置 UI。 onCreate() 的前两行应该是 super.onCreate(savedInstanceState),然后是 setContentView(R.layout.your_layout)。然后继续设置 onTouchListener。

【讨论】:

  • 是的,我正在这样做。我更改了问题,以便清楚。
  • 也许也可以发布您的activity_main.xml 内容,以便我们可以看到ImageView 等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
相关资源
最近更新 更多