在Android上使用onClick()事件时出错

在Android上使用onClick()事件时出错,android,android-activity,Android,Android Activity,我是Android新手,我启动了一个新的应用程序来播放事件监听器,当我点击按钮时,它会改变按钮的文本。。。按照开发者指南(),我创建了带有视图(一个TextView和按钮)和一个主活动的布局。但是当我编译de代码时,将.apk(Eclipse)发送到ADV并启动应用程序,我会得到错误列表: 04-26 21:37:22.615: D/dalvikvm(637): Not late-enabling CheckJNI (already on) 04-26 21:37:23.845: I/dalvi

我是Android新手,我启动了一个新的应用程序来播放事件监听器,当我点击按钮时,它会改变按钮的文本。。。按照开发者指南(),我创建了带有视图(一个TextView和按钮)和一个主活动的布局。但是当我编译de代码时,将.apk(Eclipse)发送到ADV并启动应用程序,我会得到错误列表:

04-26 21:37:22.615: D/dalvikvm(637): Not late-enabling CheckJNI (already on)
04-26 21:37:23.845: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:24.205: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:37:24.805: D/AndroidRuntime(637): Shutting down VM
04-26 21:37:24.805: W/dalvikvm(637): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
04-26 21:37:24.906: E/AndroidRuntime(637): FATAL EXCEPTION: main
04-26 21:37:24.906: E/AndroidRuntime(637): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.examples.fragmentos/com.examples.fragmentos.TestFragmentosActivity}: java.lang.NullPointerException
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.os.Looper.loop(Looper.java:137)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.main(ActivityThread.java:4424)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.reflect.Method.invokeNative(Native Method)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.reflect.Method.invoke(Method.java:511)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-26 21:37:24.906: E/AndroidRuntime(637):  at dalvik.system.NativeStart.main(Native Method)
04-26 21:37:24.906: E/AndroidRuntime(637): Caused by: java.lang.NullPointerException
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.Activity.findViewById(Activity.java:1794)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.examples.fragmentos.TestFragmentosActivity.<init>(TestFragmentosActivity.java:12)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.Class.newInstanceImpl(Native Method)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.Class.newInstance(Class.java:1319)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
04-26 21:37:24.906: E/AndroidRuntime(637):  ... 11 more
04-26 21:37:25.415: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:25.485: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:37:26.325: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:26.375: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:37:26.535: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:26.655: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:42:26.155: I/Process(637): Sending signal. PID: 637 SIG: 9

新活动中存在NullPointerException。它已正确启动,但会崩溃。错误如下所示:

04-26 21:37:24.906: E/AndroidRuntime(637): Caused by: java.lang.NullPointerException
04-26 21:37:24.906: E/AndroidRuntime(637):  at ndroid.app.Activity.findViewById(Activity.java:1794)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.examples.fragmentos.TestFragmentosActivity.init>(TestFragmentosActivity.java:12)
检查TestFragmentosActivity第12行中的代码,因为问题就在那里

编辑--

我猜第12行是这样的:

Button b = ( Button )findViewById( R.id.buttonInfo );
您正在尝试在创建视图之前获取该视图。应在使用setContentView设置视图后调用此函数。一个简单的解决方案是如下声明对象:

Button b;
在onCreate函数的末尾添加:

b = ( Button )findViewById( R.id.buttonInfo );

新活动中存在NullPointerException。它已正确启动,但会崩溃。错误如下所示:

04-26 21:37:24.906: E/AndroidRuntime(637): Caused by: java.lang.NullPointerException
04-26 21:37:24.906: E/AndroidRuntime(637):  at ndroid.app.Activity.findViewById(Activity.java:1794)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.examples.fragmentos.TestFragmentosActivity.init>(TestFragmentosActivity.java:12)
检查TestFragmentosActivity第12行中的代码,因为问题就在那里

编辑--

我猜第12行是这样的:

Button b = ( Button )findViewById( R.id.buttonInfo );
您正在尝试在创建视图之前获取该视图。应在使用setContentView设置视图后调用此函数。一个简单的解决方案是如下声明对象:

Button b;
在onCreate函数的末尾添加:

b = ( Button )findViewById( R.id.buttonInfo );

问题是
b
的初始化:

Button b = ( Button )findViewById( R.id.buttonInfo );
您只能在设置活动内容之后,即调用
setContentView()
之后,才能找到视图

试试这个:

private Button b;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    b = (Button)findViewById(R.id.buttonInfo);
    b.setOnClickListener(mbuttonInfoListener);
}

另外,请确保在布局中有一个id设置为
buttonInfo
的按钮。

问题在于
b
的初始化:

Button b = ( Button )findViewById( R.id.buttonInfo );
您只能在设置活动内容之后,即调用
setContentView()
之后,才能找到视图

试试这个:

private Button b;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    b = (Button)findViewById(R.id.buttonInfo);
    b.setOnClickListener(mbuttonInfoListener);
}

另外,请确保在布局中有一个id设置为
buttonInfo
的按钮。

是的,就是这样!。我认为setContentView()方法与其他基于MVC的语言/框架一样显示“视图”。。。非常感谢你们两位!:)是的,就是这样!。我认为setContentView()方法与其他基于MVC的语言/框架一样显示“视图”。。。非常感谢你们两位!:)