当前位置: 首页 > 面试题库 >

setOnClickListener导致“ RuntimeException:无法启动”-NullPointerException

彭俊智
2023-03-14
问题内容

我收到一个错误,但我不明白是什么原因引起的。

这是生成错误的代码片段:

public class RssReader extends Activity {
private Button button1;
@Override
public void onCreate(Bundle savedInstanceState) {
    button1 = (Button) findViewById(R.id.b1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            System.out.println("test");
        }
      });

    super.onCreate(savedInstanceState);
    setContentView(R.layout.rss_reader);
    }
}

这是我的rss_reader.xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <Button
        android:id="@+id/b1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button" />

</LinearLayout>

上面的代码导致 NullPointerException ,但是我不明白我正在访问什么空指针,因为我没有使用任何不安全的构造。完整的错误如下:

04-14 18:50:14.305: E/AndroidRuntime(443): FATAL EXCEPTION: main
04-14 18:50:14.305: E/AndroidRuntime(443): java.lang.RuntimeException: Unable to start              activity ComponentInfo{com.cris96.rssreader/com.cris96.rssreader.RssReader}:  java.lang.NullPointerException
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.os.Looper.loop(Looper.java:123)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-14 18:50:14.305: E/AndroidRuntime(443):  at java.lang.reflect.Method.invokeNative(Native Method)
04-14 18:50:14.305: E/AndroidRuntime(443):  at java.lang.reflect.Method.invoke(Method.java:507)
04-14 18:50:14.305: E/AndroidRuntime(443):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-14 18:50:14.305: E/AndroidRuntime(443):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-14 18:50:14.305: E/AndroidRuntime(443):  at dalvik.system.NativeStart.main(Native Method)
04-14 18:50:14.305: E/AndroidRuntime(443): Caused by: java.lang.NullPointerException
04-14 18:50:14.305: E/AndroidRuntime(443):  at com.cris96.rssreader.RssReader.onCreate(RssReader.java:14)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-14 18:50:14.305: E/AndroidRuntime(443):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-14 18:50:14.305: E/AndroidRuntime(443):  ... 11 more

我该如何解决?

谢谢


问题答案:

您必须先致电setContentView(R.layout.rss_reader);才能注册OnClickListeners

package com.cris96.rssreader;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;

public class RssReader extends Activity {
    private Button button1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rss_reader);

        button1 = (Button) findViewById(R.id.b1);
        button1.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                System.out.println("test");

            }
        });

    }

}


 类似资料:
  • 我有一个浮动按钮在一个片段,并希望传递意图到另一个活动。但是,当我按下浮动按钮时,导致“无法启动activity ComponentInfo”错误。 ------------编辑---------------------- 下面是我的意图代码:

  • 我用grid layout manager实现了一个recycler视图来创建一个类别列表。现在,基本上我已经尝试在我的holder-inside-OnCreateViewholder方法中实现一个setOnClick侦听器。在运行代码时,我遇到了这个错误 android.util.AndroidRuntimeExcture:从活动上下文外部调用starActive()需要FLAG_ACTIVIT

  • 我试图通过按cardview开始另一项活动,cardview有一个朋友查找id。但是当我写回家时。java它给了我setOnClickListener中的问题。在homeActivity中,它告诉我无法解析“homeActivity”中的方法“homeActivity”。因为

  • 我在运行android应用程序时遇到这个错误 05-25 23:58:44.251:E/AndroidRuntime(1128):java.lang.RuntimeException:无法启动activity ComponentInfo{info.AndroidHive.TabsSwipe/Info.AndroidHive.TabsSwipe.MainActivity}:Android.View.

  • 本文向大家介绍Mysql修改datadir导致无法启动问题解决方法,包括了Mysql修改datadir导致无法启动问题解决方法的使用技巧和注意事项,需要的朋友参考一下 centos6.2,停止mysqld然后修改/etc/my.cnf datadir的位置,启动mysqld提示FAILED,查看日志 新的datadir路径确实没问题,而且目录和目录下所有文件都是777权限,上层目录也有rx权限,只