java - setOnClickListener() 的空指针异常

标签 java android nullpointerexception

我的代码有时会出现空指针异常。奇怪的是,这种情况并不是每次都会发生,我也不知道为什么。帮忙?

package net.obviam.droidz;
public class HomeView extends Activity {
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);



     setContentView(R.layout.menu);



    Button page1 = (Button) findViewById(R.id.Button01);
         page1.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View view) {
//                   Intent i = getIntent();
                     Intent myIntent = new Intent(view.getContext(), DroidzActivity.class);
                     startActivityForResult(myIntent, 0);
                 }

     });


}



protected void onDestroy() {
//      Log.d(TAG, "Destroying..");
        super.onDestroy();
    }
    @Override
    protected void onStop() {
//      Log.d(TAG, "Stopping...");
        super.onStop();
    }

}

logcat 表明问题出在第 19 行,即 setOnClickListener。我不确定它有什么问题。它似乎没有引用任何内容。

Logcat 的内容如下:

02-17 16:52:13.816: E/AndroidRuntime(23756): FATAL EXCEPTION: main
02-17 16:52:13.816: E/AndroidRuntime(23756): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.obviam.droidz/net.obviam.droidz.HomeView}: java.lang.NullPointerException
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.os.Looper.loop(Looper.java:130)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.app.ActivityThread.main(ActivityThread.java:3687)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at java.lang.reflect.Method.invokeNative(Native Method)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at java.lang.reflect.Method.invoke(Method.java:507)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at dalvik.system.NativeStart.main(Native Method)
02-17 16:52:13.816: E/AndroidRuntime(23756): Caused by: java.lang.NullPointerException
02-17 16:52:13.816: E/AndroidRuntime(23756):    at net.obviam.droidz.HomeView.onCreate(HomeView.java:19)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-17 16:52:13.816: E/AndroidRuntime(23756):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
02-17 16:52:13.816: E/AndroidRuntime(23756):    ... 11 more

这是 list 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.obviam.droidz"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="10" />

<application
    android:icon="@drawable/images"
    android:label="@string/app_name" android:debuggable="true">
    <activity android:name=".HomeView" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".DroidzActivity"></activity>

</application>

这是该按钮所在的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

 <Button android:text="Start Game!"
        android:id="@+id/Button01"
        android:layout_width="250dp"
        android:textSize="18dp"
        android:layout_height="55dp">
    </Button>



</LinearLayout>

最佳答案

阅读完提供的堆栈跟踪后,我认为问题是当您启动新 Intent 时,您要传递 Activity 的上下文,而不是 View 的:

Button page1 = (Button) findViewById(R.id.Button01);
page1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Intent myIntent = new Intent(getContext(), DroidzActivity.class); // fix View.getContext() to getContext()
        startActivity(myIntent);    // change to startActivity
    }
});

至于为什么这是一个间歇性问题,我不知道。

关于java - setOnClickListener() 的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9336615/

相关文章:

java - 将 java.util.logging 写入文件

java.lang.NullPointerException 第 53 行

android - 从 phonegap 中的 Assets 访问 sqlite 数据库

android - 获取非电话 iDevices 和 Android 平板电脑的唯一 ID

java - Hadoop比较器方法比较不是从复合键类调用

java - 当窗口关闭时 Controller 会发生什么?

android - 我如何为 Android 优化此对话框代码?

nullpointerexception - Elvis 运算符与非空断言 : Diff Between These Statements?

java - 来自java的Mysql存储过程数组参数

java - POJO 中单个字段上的内部对象值(JSON 对象)的映射