【问题标题】:NullPointerException for OnClickListener in certain phones某些手机​​中 OnClickListener 的 NullPointerException
【发布时间】:2013-03-14 09:17:08
【问题描述】:

我在这一行收到NullPointerException

ImageButton sb = (ImageButton) findViewById(R.id.imageButton2);
sb.setOnClickListener(new OnClickListener() { //error on this line

    public void onClick(View v) {
        Intent intent = new Intent(AlarmClock.this,SettingsActivity.class);
        startActivity(intent);
    }
});

我检查了setContentView(),它引用了正确的布局文件,其中imageButton2如下:

<ImageView
    android:id="@+id/imageButton1"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_weight="0.275"
    android:scaleType="fitCenter"
    android:src="@drawable/bell_icon" />

这是崩溃报告:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.moosa.alarmclock/com.moosa.alarmclock.AlarmClock}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3689)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at com.moosa.alarmclock.AlarmClock.updateLayout(AlarmClock.java:260)
    at com.moosa.alarmclock.AlarmClock.onCreate(AlarmClock.java:220)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
    ... 11 more

最大的问题是:我在 GingerBread 手机或 ICS 模拟器上找不到错误。似乎这个问题主要发生在为已发布报告发送崩溃报告的 Galaxy S3 上。

请帮帮我,因为这是我发布的第一个应用程序。

【问题讨论】:

  • 您是否有多个布局文件可用于不同的屏幕?如果是这样,S3 可能正在加载 ID 中有拼写错误的布局文件,或者完全没有该 ID。
  • 这可能是问题所在。在 res/layout-land 文件夹中有一个相同布局文件的副本,没有新元素 Thnaks a ton

标签: android android-layout android-event


【解决方案1】:

如果您有多个布局文件要使用不同的屏幕尺寸或方向,则 S3 可能会加载其中一个文件,其中您的 ImageButton 具有不同的 ID,或者完全丢失。

这将导致 null 值并导致您的崩溃。

【讨论】:

  • @MohammadShabazMoosa 很高兴我能帮上忙!
【解决方案2】:

如果在它之前请填写

ImageButton sb = (ImageButton)findViewById(R.id.imageButton2); if(sb!=null)

sb.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) {
        Intent intent = new Intent(AlarmClock.this,SettingsActivity.class);
        startActivity(intent);

    }
});

否则它将在运行时崩溃。

【讨论】:

  • 这并不能真正回答它为什么会崩溃的问题。它只是防止崩溃,并且还会终止该按钮提供的任何功能。
猜你喜欢
  • 2012-02-17
  • 2017-05-11
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多