Android应用程序在运行时意外停止

时间:2011-12-28 22:07:29

标签: java android

在模拟器中测试我的应用程序时(我正在使用Eclipse)它向我显示“应用程序计数器(com.ian.counter)已意外停止。请再试一次。”什么时候运行它。我搜索并搜索了答案,但我没有找到答案。有人知道这个问题吗?

代码:

package com.ian.counter;

import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
import android.widget.Toast;

public class CounterActivity extends Activity {
    /** Called when the activity is first created. */
    TextView textView1 = (TextView) this.findViewById(R.id.textView1);
    int count = 0;
    @Override  
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void Count(){
        count ++;
        textView1.setText(Integer.toString(count));
    }
}

logcat的:

12-28 16:59:20.615: D/AndroidRuntime(353): Shutting down VM
12-28 16:59:20.686: W/dalvikvm(353): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-28 16:59:20.756: E/AndroidRuntime(353): FATAL EXCEPTION: main
12-28 16:59:20.756: E/AndroidRuntime(353): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ian.counter/com.ian.counter.CounterActivity}: java.lang.NullPointerException
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.os.Looper.loop(Looper.java:123)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.ActivityThread.main(ActivityThread.java:3683)
12-28 16:59:20.756: E/AndroidRuntime(353):  at java.lang.reflect.Method.invokeNative(Native Method)
12-28 16:59:20.756: E/AndroidRuntime(353):  at java.lang.reflect.Method.invoke(Method.java:507)
12-28 16:59:20.756: E/AndroidRuntime(353):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-28 16:59:20.756: E/AndroidRuntime(353):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-28 16:59:20.756: E/AndroidRuntime(353):  at dalvik.system.NativeStart.main(Native Method)
12-28 16:59:20.756: E/AndroidRuntime(353): Caused by: java.lang.NullPointerException
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.Activity.findViewById(Activity.java:1647)
12-28 16:59:20.756: E/AndroidRuntime(353):  at com.ian.counter.CounterActivity.<init>(CounterActivity.java:10)
12-28 16:59:20.756: E/AndroidRuntime(353):  at java.lang.Class.newInstanceImpl(Native Method)
12-28 16:59:20.756: E/AndroidRuntime(353):  at java.lang.Class.newInstance(Class.java:1409)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-28 16:59:20.756: E/AndroidRuntime(353):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您在设置布局之前尝试设置textView1变量。您需要将其定义为变量,然后在调用onCreate()后在setContentView()中将其分配。像这样:

package com.ian.counter;

import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
import android.widget.Toast;

public class CounterActivity extends Activity {
    /** Called when the activity is first created. */
    TextView textView1;
    int count = 0;
    @Override  
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView1 = (TextView) this.findViewById(R.id.textView1);
    }

    public void Count(){
        count ++;
        textView1.setText(Integer.toString(count));
    }
}

只需复制并粘贴上面的内容,即可以正常使用。

答案 1 :(得分:1)

你应该把这一行

textView1 = (TextView) this.findViewById(R.id.textView1);

之后

setContentView(R.layout.main);

您只需在开头

中声明TextView
TextView textView1;

在声明实例变量时不要尝试使用findViewById(R.id.textView1);,因为在那个时间点不存在视图。

答案 2 :(得分:0)

这就是你的代码的样子:

TextView textView1 = null; 
    int count = 0;
    @Override  
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
     TextView textView1 =  (TextView) findViewById(R.id.textView1);
    }

    public void Count(){
        count ++;
        textView1.setText(Integer.toString(count));
    }